如果我定義一個結構,如:行爲
struct tiny
{
long t;
};
將它像一個long
中的函數參數和相似, 例如在術語處理會的參數:
void myfunc(tiny x)
{ ... }
被像一個long
參數處理實際上被推入棧?
因此,基本上,tiny
結構只有它的唯一成員?
感謝
如果我定義一個結構,如:行爲
struct tiny
{
long t;
};
將它像一個long
中的函數參數和相似, 例如在術語處理會的參數:
void myfunc(tiny x)
{ ... }
被像一個long
參數處理實際上被推入棧?
因此,基本上,tiny
結構只有它的唯一成員?
感謝
結構的內存消耗至少是組成變量的內存大小的總和。
但是,編譯器可以在變量之間或在該結構的末尾添加填充,以確保正確的數據對齊對於給定的計算機體系結構
有沒有它的保證,但至少在我看了它,它一般會是的,是的編譯器。
如果開始添加虛擬功能,它將由4個字節上最增加系統/編譯器(每個接口包含額外的4個字節)。一般來說,除非編譯器已經像Aviv所說的那樣添加了額外的填充,否則結構應該與內容大小相同。
看一看的#pragma包(n)的包裝問題,至少在Visual Studio(Microsoft page on pragma pack)
-1我沒有在OP的代碼中看到任何虛函數。他在問一個「微小」的結構;實際上,他指的是POD,雖然他還不知道。出於任何原因,該類型的寬度至少可以與其成員寬度的總和相同。 '#pragma'是非標準的。 – 2011-03-04 17:35:50
我只是說這是當它不是POD時它會開始變大。這就是爲什麼我說'如果'。不需要標記我。 – Luther 2011-03-04 17:38:42
即使是POD,它也可以變大。這就是爲什麼我標記你。 – 2011-03-04 19:13:09
標準對符合特定標準,被稱爲莢類的特別規定,以保持Ç兼容性。除此之外,這些類型不會被填充。在這種情況下,'tiny'結構符合這些標準。 – 2011-03-04 17:30:36
@dauphic不,類/結構可以是POD,仍然有填充。 – 2011-03-04 17:33:12
@dauphic:POD可以有填充,只是不在開始。見2003年的9.2/17。 – 2011-03-04 17:35:11