C語言之struct結構體內存分配

2021-09-24 22:51:57 字數 1812 閱讀 3298

實驗使用sizeof關鍵字測量結構體大小的規則

查資料得到的規則如下

原則1、資料成員對齊規則:結構(struct或聯合union)的資料成員,第乙個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小的整數倍開始(比如int在32位機為4位元組,則要從4的整數倍位址開始儲存)。

原則2、結構體作為成員:如果乙個結構裡有某些結構體成員,則結構體成員要從其內部最大元素大小的整數倍位址開始儲存。(struct a裡存有struct b,b裡有char,int,double等元素,那b應該從8的整數倍開始儲存。)

原則3、收尾工作:結構體的總大小,也就是sizeof的結果,必須是其內部最大成員的整數倍,不足的要補齊。

unsigned char_size:1

char_size :1

int_size :4

float_size :4

double_size :8

typedef struct

struct01;

//struct01_size:3

// num01 num02 num03

typedef struct

struct02;

//struct02_size:8

// num01 * * *

// num02 num02 num02 num02

typedef struct

struct03;

//struct03_size:16

// num01 num01 num01 num01 * * * *

// num02 num02 num02 num02 num02 num02 num02 num02

typedef struct

struct04;

//struct04_size:24

// num01 num01 num01 num01 * * * *

// num02 num02 num02 num02 num02 num02 num02 num02

// num03 * * * * * * *

typedef struct

struct05;

//struct05_size:24

// num01 num01 num01 num01 * * * *

// num02 num02 num02 num02 num02 num02 num02 num02

// num03 num04 * * * * * *

typedef struct

struct06;

//struct06_size:24

// num01 num01 num01 num01 * * * *

// num02 num02 num02 num02 num02 num02 num02 num02

// num03 num04 * * num05 num05 num05 num05

typedef struct

struct07;

//struct07_size:64

C語言之結構體內存對齊

結構體的記憶體對齊 首先得掌握結構體對齊規則 1 第乙個成員在結構體變數偏移量為0的位址處。2 其他成員變數要對齊到某個數字 對齊數 的整數倍的位址處。對齊數 編譯器預設的乙個對齊數與該成員大小的較小值。vs中預設的值為8 linux中的預設值為4 3 結構體總大小為最大對齊數的整數倍。4 如果巢狀...

c語言之結構 struct

struct 結構就是建立乙個模板,類似於陣列,不過它可以擁有不同型別的變數,包括陣列 1,建立結構宣告 舉例 struct book char title 20 char author 20 float value 其中struct是關鍵字,book是結構名,裡面的titlt,author,val...

struct 結構體內存對齊方式

以下都以32位機器為例分析結構體型別的變數在記憶體裡的儲存 一 1.結構體變數的儲存位置都是在記憶體中尋找位址是該變數自身大小整數倍開始儲存的。2.結構體型別變數的總大小應是該型別成員中最大資料型別的整數倍。就此兩點,可以解決所有問題,對於第一條,應該注意每一位成員存放的首位址定為自身的整數倍。例子...