在 C# 中获取内存中的下一个对象大小的空间

本文关键字:空间 一个对象 获取 内存 | 更新日期: 2023-09-27 18:36:50

我有一个类 class1,C++中定义了一个函数:

class1 GetNextObject(class1 x) 
{
    return (x + sizeof(x));
}

因此,这会将内存中的下一个块类型转换为 class1。如何在 C# 中执行此操作?我需要将下一个空间块作为 class1 类型返回。

在 C# 中获取内存中的下一个对象大小的空间

你不能在C#中这样做,因为你无法控制你的类型占用的块空间。它会在机器的内存空间周围移动,因为GC试图对垃圾回收后出现的内存空间进行碎片整理。

而且,这不是你打算用C#语言(或任何其他CLR语言)做的事情。如果您需要深度控制内存消耗和/或内存高级操作,请坚持使用 C++

不期望类 1 对象的数组作为参数,C++ 函数只接受单个对象并返回下一个空格 记忆

这不是你必须在 C# 中警惕的事情:

  • 你创建,比如说,列表
  • 添加/删除值。

如何管理内存不是你知道或担心的事情,即使你知道,它也不是你能控制的事情,也可能是一个改变的主题(取决于Microsoft架构师)。

你不能在 C# 中做同样的事情。内存的管理方式与C++非常不同,你不能指望下一个空间块可能是另一个有效的class1,你甚至不能轻易地看到下一个内存是什么。

您可能希望使用LinkedList<T> 。 例如

LinkedList<class1> myList = new LinkedList<class1>
    (new[] { new class1(1), new class1(2), new class1(3) });
LinkedListNode<class1> myItem = myList.First;
Console.WriteLine(myItem.Next.Value.Id); // 2
public class class1
{
    public int Id { get; set; }
    public class1(int id)
    {
        this.Id = id;
    }
}

但更常见的方法是仅将列表作为列表进行管理。因此,如果您希望能够引用这两个对象,则无需期望能够从另一个class1实例访问一个class1对象,只需传递要使用的数组/列表/IList<T>/etc。