0

我有一个类 class1 并且在 C++ 中有一个函数定义为:

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

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

4

2 回答 2

2

您不能在 中执行此操作C#,因为您无法控制您的类型占用的块空间。它在您机器的内存空间中移动,就像GC在垃圾收集后尝试对内存空间进行碎片整理一样。

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

C++ 函数不需要将 class1 对象数组作为参数,而是只接受一个对象并返回内存中的下一个空间

这在 C# 中不必担心:

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

内存的管理方式不是您知道或担心的事情,即使您知道,也不是您可以控制的事情,也可能会发生变化(取决于 Microsoft 架构师)。

于 2013-10-24T18:57:28.327 回答
2

你不能在 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。您想与之合作的。

于 2013-10-24T19:01:32.767 回答