CLR控制欄位的布局

2021-05-25 09:47:54 字數 566 閱讀 9070

為了提高效能,clr能按照它所選擇的任何方式來排列型別的字段。為了向clr發出指示,需要在定義的類或者結構上應用system.runtime.interopservices.structlayoutattribute屬性。可以向這個屬性的構造器傳遞layoutkind.auto,讓clr自動排列字段;或者傳遞layoutkind.sequential,讓clr保持我們的字段布局;或者傳遞layoutkind.explicit,並用偏移量在記憶體中顯示地排列欄位的順序。在程式設計人員定義的型別上,如果不能顯示地指定structlayoutattribute,編譯器會選擇它自己認為最好的布局。

c#編譯器會預設為引用型別選擇layoutkind.auto,預設為值型別選擇layoutkind.sequential。

例如,

在乙個型別中,乙個引用型別和乙個值型別互相重疊是非法的。在乙個型別中,雖然允許多個引用型別在同乙個起始偏移位置處相互重疊,但這是無法驗證的。如果定義乙個型別,並讓其中的多個值型別相互重疊,則是合法的;不過,所有重疊的位元組都必須能通過公共字段訪問,使型別能夠驗證。乙個字段假如在乙個值型別中是私有的 ,但在另乙個重疊的值型別中是公共的,型別就無法驗證。

控制CLR的除錯

在除錯.net程式時,偵錯程式可以載入乙個輔助dll,稱為mscordacwks.dll,這個dll用於輸出託管 除錯過程中的各種資訊 例 如sos命令的輸出 載入mscordacwks.dll的路徑取決於被載入到程序中的mscorwks.dll的路徑。在實時除錯 live debugging 中通...

CLR筆記 7 常量和字段

1.常量 常量是永遠不會改變的符號。它的值必須在編譯時就確定。編譯後,clr將常量的值儲存在assembly的元資料中,這意味著常量必須是基元型別。常量是型別的一部分,總是被當成靜態成員,但並不顯示宣告為static。public const int32 maxentrieslist 100 pub...

skb buff 布局字段

linux網路協議棧中主要的快取型別。定義在include linux skbuff.h中,它是乙個雙向鍊錶的資料結構。它的字段和函式主要分為四大類 1.布局字段 與整個sk buff鍊錶結構相關的字段 2.通用資訊字段 3.特性相關字段 4.管理功能函式 為了很快地找到sk buff鍊錶中的表頭,...