c語言資料結構補齊原則
/*
原則1、資料成員對齊規則:結構(struct或聯合union)的資料成員,第一個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小的整數倍開始(比如int在32位機為4位元組,則要從4的整數倍地址開始儲存)。
原則2、結構體作為成員:如果一個結構裡有某些結構體成員,則結構體成員要從其內部最大元素大小的整數倍地址開始儲存。(struct a裡存有struct b,b裡有char,int,double等元素,那b應該從8的整數倍開始儲存。)
原則3、收尾工作:結構體的總大小,也就是sizeof的結果,必須是其內部最大成員的整數倍,不足的要補齊。
*/
#include <iostream>
using namespace std;
struct A
{
short a; //大小為2, 因為b的大小是4,所以要補2
int b; //大小為4
char c; // 大小為1
// 所以2+2+4+1+3 = 12 ,最後的三,因為“原則3”,9並不是4的倍數,所以需要補3
};
struct B
{
int a; // 大小為4,
char b; // 大小為1,因為c大小為2,所以b需要補1
short c; //大小為2
// 所以4+1+1+2 = 8(也滿足原則3)
};
struct C
{
int a; // 大小為4,開始為0,不用補位
double b; // 大小為8,開始不是8的倍數,所以int後要補4位
float c; // 大小為8, 地址正好是8的倍數,所以不用補位
// 所以 4+4+8+8 = 24;
};
struct D
{
char e[2]; //大小為2,因為f為4,所以補2 = 4
int f; // 大小為4,因為e補了2所以g的起始地址正好是8的倍數,所以不用補位
double g; // 大小為8
float h; // 大小為8
struct C i; // 因為前面總數為8的倍數(C的最大值為8)所以不用補位(總大小為24)
// 所以 2+2+4+8+8+24 = 48,滿足第三條
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
cout << "sizeof(A)=" << sizeof(A) << endl;
cout << "sizeof(B)=" << sizeof(B) << endl;
cout << "sizeof(C)=" << sizeof(C) << endl;
cout << "sizeof(D)=" << sizeof(D) << endl;
return a.exec();
}
相關文章
- C 語言結構體的對齊原則結構體
- 資料結構雜湊表(c語言)資料結構C語言
- 資料結構 順序棧(c語言)資料結構C語言
- 資料結構C語言|佇列相關資料結構C語言佇列
- C語言_資料結構圖(留個筆記)C語言資料結構筆記
- 【資料結構】實現順序表(c語言)資料結構C語言
- 重學C語言_資料結構與基礎語法C語言資料結構
- 關於C語言結構體對齊問題的探討C語言結構體
- 資料結構——單連結串列介面實現(C語言)資料結構C語言
- 用c語言實現資料結構——單連結串列C語言資料結構
- C語言(結構體)C語言結構體
- C語言 printf 格式化 輸出 右對齊補零C語言
- 【資料結構】迴圈佇列 C語言實現資料結構佇列C語言
- C語言資料結構:鏈式棧及其出入棧C語言資料結構
- C/C++記憶體對齊原則C++記憶體
- C語言教程——03 C語言結構C語言
- C語言-選擇結構C語言
- 樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 資料結構c語言實現順序表基本操作資料結構C語言
- C語言版資料結構及演算法_快速排序C語言資料結構演算法排序
- C語言實現的資料結構之------雜湊表C語言資料結構
- C語言資料結構:雙向連結串列的增刪操作C語言資料結構
- C語言記憶體對齊C語言記憶體
- C語言資料結構(8)--棧 後進先出線性表C語言資料結構
- AVL 樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 伸展樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 資料結構之---C語言實現快速排序(多個版本)資料結構C語言排序
- C語言結構體專題C語言結構體
- C語言結構體大小分析C語言結構體
- 程式語言基本組成:資料結構資料結構
- C語言中結構體struct的對齊問題C語言結構體Struct
- C語言資料結構:單向迴圈連結串列的增刪操作C語言資料結構
- C語言資料結構:雙向迴圈連結串列的增刪操作C語言資料結構
- 【資料結構】用C語言實現單連結串列及其常見操作資料結構C語言
- 資料結構與演算法分析(c 語言描述)習題 1.2資料結構演算法
- 資料結構與演算法分析(c 語言描述)習題 1.3資料結構演算法
- 資料結構與演算法分析(c 語言描述)習題 1.1資料結構演算法
- 棧 ADT 【資料結構與演算法分析 c 語言描述】資料結構演算法