本文介绍了打包__nogc类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

__nogc类的打包对齐是否作为程序集的一部分存储?

我认为它必须作为编译器,在引用程序集时,无法知道如何知道如何原始数据以其他方式打包。但是,根据我的理解,

属性只是__gc和__value类特定的,不适用于

__nogc类。它是否正确 ?如果是这样,如何存储

__nogc类的包装对齐?

Is the packing alignment of __nogc classes stored as part of the assembly ?
I think it must as the compiler, when referencing the assembly, could not
know how the original data is packed otherwise. Yet, in my understanding,
attributes are only __gc and __value class specific and do not apply to
__nogc classes. Is this correct ? If so, how is the packing alignment of
__nogc classes stored ?

推荐答案








好​​吧,我认为包装实际上并没有存储。当编译器

为__nogc类创建元数据(确实是非常基本的元数据)时,它通过将它们创建为不透明的值类型来实现这一点,这意味着它基本上创建了

它们作为不包含成员的值类型,只有

布局和大小的基本信息。


这是一个例子这样的__nogc类代表:


..class private sequential ansi sealed A

extends [mscorlib] System.ValueType

{

.pack 1

.size 12

} // A级结束


注意.pack和.size指令,它告诉运行时如何打包类型和类型的大小。


AFAIK,编译器将*总是*使用.pack 1标记__nogc类型,即使

实际包装不同。但是,编译器*将*调整.size

指令,以便它根据它的包装反映内存中对象的实际大小

。在这种情况下,我尝试用一​​个类来支持
一个int,一个char和另一个int,打包设置为4.如果我将它设置为1,那么

然后代码会说'.size 9"等等。


-

Tomas Restrepo


这篇关于打包__nogc类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-01 05:18