使用靜態陣列建立類

2022-03-24 09:22:21 字數 1134 閱讀 1798

問題是這樣的:實現框架中類的rtti需要儲存類資訊,為每乙個要加入到執行時識別的類框架中的類,

都建立乙個儲存類資訊的classinfo類物件,記憶體使用的是靜態資料區的類中靜態陣列。

靜態陣列的大小是:

u32 _classname::s_classinfobuf[(sizeof(classinfo) + sizeof(u32) - 1) / sizeof(u32)];
new (s_classinfobuf) classinfo();

這個陣列的大小 = (sizeof(classinfo) + sizeof(u32) - 1) / sizeof(u32) 著實讓我看了很久沒有弄明白。

類的大小到底怎麼計算的:sizeof(classinfo)不能夠計算類的大小嗎?這裡有什麼懸疑呢?

為何不直接  

s_classinfobuf [sizeof(classinfo) / sizeof(u32)]?

(類中的靜態成員:在宣告中時,也都是宣告而不是定義,類靜態成員都是必須在類外進行定義的。)

1避免為0:乙個空類的大小為1,sizeof(classinfo) = 1 而sizeof(u32) = 4 ,1/4 = 0;

長度為0,no!其實這樣直接使用u8就可以了……

2保證四位元組對齊:a = (sizeof(vfxclassinfo) + sizeof(vfxu32) - 1) / sizeof(vfxu32)

的結果一定是4的倍數,且a*4 > = sizeof(classinfo)。如果sizeof(classinfo)長度為17,

則陣列長度為:(17 + 4 - 1)/ 4 = 5 實際陣列大小:sizeof(u32)* 5 = 20。

保證靜態陣列的長度是4的倍數,且能足夠滿足建立classinfo需要的記憶體大小。

那麼sizeof()計算的類大小不會保證一定是4位元組對齊,按道理說這個是編譯器會自動完成相應的位元組對齊計算的,

在建立物件的時候也會根據指定位元組對齊方式。sizeof()計算大小和new建立物件都會使用相同位元組對齊方式。

所以這裡並沒有實際的意義;可能就像我們系統工程師所說:以防萬一!

(為何要位元組對齊:

使用靜態陣列建立類

問題是這樣的 實現框架中類的rtti需要儲存類資訊,為每乙個要加入到執行時識別的類框架中的類,都建立乙個儲存類資訊的classinfo類物件,記憶體使用的是靜態資料區的類中靜態陣列。靜態陣列的大小是 u32 classname s classinfobuf sizeof classinfo size...

資料結構中的陣列 靜態陣列類的建立

1,順序儲存線性表兩個問題 1,當做陣列誤用 2,效率有隱患 2,本文解決第乙個功能上的問題,建立乙個陣列類代替順序儲存結構中的陣列訪問操作符 1,完成 array 類的具體實現 2,完成 staticarray 類的具體實現,替代原生陣列 4,需求分析 1,建立陣列類代替原生陣列的使用 1,陣列類...

C Array類 建立陣列

除了使用c 語法 建立陣列之外,還可以使用靜態方法 createinstance 建立陣列。舉個例子 array intarray1 array.createinstance typeof int 5 for int i 0 i 5 i for int i 0 i 5 i 在這個例子中,演示了如何建...