為什麼在 C/C++ 中,結構體的 sizeof 不等於其每個成員 sizeof 的總和?
結構體 sizeof 與其每個成員 sizeof 之和的差異是由於位元組填充和對齊造成的。C/C++ 中的每種資料型別都有對齊要求。處理器將具有其體系結構的處理字長。在 32 位機器上,處理字大小將為 4 位元組或 32 位。例如,如果您有以下結構體:
示例
#include <iostream>
using namespace std;
struct X
{
char b[3];
int c;
};
int main()
{
char b[3];
int c;
int total = sizeof(b) + sizeof(c);
cout << sizeof(X) << endl;
cout << total;
}輸出
這將輸出:
8 7
在我的 64 位機器上。為什麼會這樣?這是因為在結構體中,它獲取字元陣列並將其放入記憶體,但如果它將大小為 4 位元組的 int 放置在其旁邊,則會違反對齊規則。因此,跳過 b 結尾處的額外位元組,c 從 4 位元組邊界開始。這會導致額外的空間。
您可以在 https://en.wikipedia.org/wiki/Data_structure_alignment. 瞭解更多關於這些規則的資訊。
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP