為什麼在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位元組的整數放在它的旁邊,則會違反對齊規則。所以,`b`結尾的額外位元組會被跳過,`c`從4位元組邊界開始。這就導致了額外的大小。
你可以在https://en.wikipedia.org/wiki/Data_structure_alignment.瞭解更多關於這些規則的資訊。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP