C# 在C中获取内存中下一个对象大小的空间# 我有一个类Cyl,并且在C++中定义了一个函数: class1 GetNextObject(class1 x) { return (x + sizeof(x)); }

C# 在C中获取内存中下一个对象大小的空间# 我有一个类Cyl,并且在C++中定义了一个函数: class1 GetNextObject(class1 x) { return (x + sizeof(x)); },c#,c++,memory-management,C#,C++,Memory Management,这就给出了内存中的下一个块,类型为class1。我如何在C#中实现这一点?我需要将下一个空格块作为class1类型返回。您不能在C#中执行此操作,因为您无法控制您的类型占用的空格块。当垃圾回收后,GC试图对内存空间进行碎片化时,它会在机器的内存空间中四处移动 但是,这不是你想用C#语言(或者基本上是任何其他CLR语言)做的事情。如果需要深入控制内存消耗和/或内存高级操作,请坚持使用C++ >而不是期待一组Case1对象作为参数,C++ 函数只获取一个对象并返回其中的下一个空格 记忆 在C#中,

这就给出了内存中的下一个块,类型为class1。我如何在C#中实现这一点?我需要将下一个空格块作为class1类型返回。

您不能在
C#
中执行此操作,因为您无法控制您的类型占用的空格块。当垃圾回收后,
GC
试图对内存空间进行碎片化时,它会在机器的内存空间中四处移动

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

<> >而不是期待一组Case1对象作为参数,C++ 函数只获取一个对象并返回其中的下一个空格 记忆

在C#中,这一点你不必担心:

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

如何管理内存不是您所知道或担心的事情,即使您知道,也不是您可以控制的事情,也可能会发生更改(取决于Microsoft architects)。

您不能在
C#
中这样做,因为您无法控制类型占用的块空间。当垃圾回收后,
GC
试图对内存空间进行碎片化时,它会在机器的内存空间中四处移动

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

<> >而不是期待一组Case1对象作为参数,C++ 函数只获取一个对象并返回其中的下一个空格 记忆

在C#中,这一点你不必担心:

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

如何管理内存不是你所知道或担心的事情,即使你知道,也不是你所能控制的事情,也可能会发生变化(取决于Microsoft architects)。

在C#中你不能做同样的事情。内存管理方式与C++有很大的不同,你不能期望下一个空间块可能是另一个有效的代码< Calth1S/<代码>,也不能很容易地看到内存是什么。 您可能需要使用一个新的。例如

LinkedList myList=新建LinkedList
(新【】{新类别1(1)、新类别1(2)、新类别1(3)});
LinkedListNode myItem=myList.First;
Console.WriteLine(myItem.Next.Value.Id);//2.
公共班级1
{
公共int Id{get;set;}
公共类别1(内部id)
{
这个.Id=Id;
}
}

但更常见的方法是将列表作为列表进行管理。因此,与其期望能够从另一个
class1
实例获取一个
class1
对象,如果您希望能够引用这两个实例,只需传递您想要使用的数组/list/
IList
/等等。

在C中不能做同样的事情。内存管理方式与C++有很大的不同,你不能期望下一个空间块可能是另一个有效的代码< Calth1S/<代码>,也不能很容易地看到内存是什么。 您可能需要使用一个新的。例如

LinkedList myList=新建LinkedList
(新【】{新类别1(1)、新类别1(2)、新类别1(3)});
LinkedListNode myItem=myList.First;
Console.WriteLine(myItem.Next.Value.Id);//2.
公共班级1
{
公共int Id{get;set;}
公共类别1(内部id)
{
这个.Id=Id;
}
}

但更常见的方法是将列表作为列表进行管理。因此,与其期望能够从另一个
class1
实例获取一个
class1
对象,如果您希望能够引用这两个实例,只需传递您想要使用的数组/list/
IList
/等即可。你为什么要这么做?我把C++函数翻译成C。C++ C++函数不需要将一组Calb1对象作为参数,而是只需要一个对象,并返回内存中的下一个空间。幸运的是,在C#中没有办法做到这一点。你没有。你为什么要这么做?我把C++函数翻译成C。C++ C++函数不需要将一组Calb1对象作为参数,而是只需要一个对象,并返回内存中的下一个空间。幸运的是,在C#中没有办法做到这一点。
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;
    }
}