读一下Marshal.SizeOf().的定义,它说:The size returned is the size of the unmanaged object. The unmanaged and managed sizes of an object can differ.是不是意味着Marshal.SizeOf将返回定义大小,而不是实际内存分配的大小,因为可能有一些填充用于对齐?
例如:
struct MyStruct
{
char c;
}
如果我使用Marshal.SizeOf(),非托管对象的大小将是1字节(非托管大小),但如果我使用sizeof(,则托管对象的大小可能是2或4
当我在.NET中生成一个新线程时,我想了解场景背后到底发生了什么,如下所示:
Thread t = new Thread(DoWork); //I am not interested in DoWork per se
t.Start();
在CLR和Windows内核中创建了哪些与线程相关的对象?
为什么需要这些东西?
在x86,x64 Windows上分配了多少托管/非托管内存(堆和堆栈)?
更新
我正在寻找像托管线程对象这样的对象,我假设它是t,但可能是其他一些额外的托管对象;内核线程对象、用户线程环境块等等。
非常感谢!
我有一个外部方法,它接收一些参数,分配内存并返回一个指针。
[DllImport("some.dll", CallingConvention = CvInvoke.CvCallingConvention)]
public static extern IntPtr cvCreateHeader(
Size size,
int a,
int b);
我很清楚,在托管应用程序中分配非托管内存是错误的做法,但在这种情况下,我别无选择,因为dll是第三方的。
有一个释放内存的等价函数,我知道分配的数组的大小。
如何将返回的指针插入,这样GC就