在 C# 中获取内存中的下一个对象大小的空间
getting next object sized space in memory in C#
我有一个类 class1,C++中定义了一个函数:
class1 GetNextObject(class1 x)
{
return (x + sizeof(x));
}
因此,这会将内存中的下一个块类型转换为 class1。如何在 C# 中执行此操作?我需要将下一个空间块作为 class1 类型返回。
你不能在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。
相关文章:
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 从多个源构造一个对象,包括一个对象向量
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 检查哪个对象调用了另一个对象的对象方法
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 包装一个对象并假装它是一个 int
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 如何使用函数将一个对象的输入复制到另一个对象中
- 选择一个元素而不是一个对象的数组的原因
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 由另一个对象重用对象的空间
- 只有当声明一个对象时,内存空间才会分配给类的数据成员,那么为什么 Sizeof(class_name) 给我结果
- 在 C# 中获取内存中的下一个对象大小的空间
- 如何在 c++ 中返回一个本身在堆上分配了空间的对象