結構體的優化聲明

聲明一個結構體的時候,由於考慮到內存的對齊。例如,int型的變量,須要4個字節,那麼它在存儲的時候就須要在地址可以被4個字節整除的地方開始申請。node

例如咱們申請下面這樣的一個結構體:優化

struct{ char a; int b; char c; } node1;

在內存分配的時候,char佔一個字節,int 佔四個字節。spa

c語言在進行內存分配的時候,須要根據最大的寬度來進行分配。如咱們例子中,int須要4個字節,在分配char型的時候,雖然char只佔用一個字節,可是也須要從4個字節的位置開始分配。code

分配的內存以下:blog

 a  -    -     -    b                c    -    -    -   

a分配結束後,要自動填充3個字節,再分配b,而後是c,再自動填充3個字節。內存

因此node1這個結構體的寬度是12get

優化聲明

咱們儘可能把對邊界要求嚴格的字段放在前面,要求弱的放在後面(強弱就是相對於寬度對齊來講):string

struct{ int b; char a; char c; } node1;

 

 b       a  c  -  -

 

這樣,先分配int,再分配char,雖然每次申請4個字節,可是最後的長度倒是8,所以節省了33%的地址空間。io

代碼驗證

 

// test1107.cpp : 定義控制檯應用程序的入口點。 //  #include "stdafx.h" #include "stdio.h" #include "string.h" typedef struct{ int b; char a; char c; } node1; typedef struct{ char a; int b; char c; } node2; int main(){ printf("%d\n",sizeof(char)); printf("%d\n",sizeof(int)); node1 n1; node2 n2; printf("%d %d\n",sizeof(n1),sizeof(n2)); getchar(); return 0; }

 

最後輸出:table

1

4

8 12

相關文章
相關標籤/搜索