結構體的優化宣告

2021-09-08 05:59:28 字數 1018 閱讀 9053

宣告乙個結構體的時候,因為考慮到記憶體的對齊。例如,int型的變數,需要4個位元組,那麼它在儲存的時候就需要在位址能夠被4個位元組整除的地方開始申請。

例如我們申請下面這樣的乙個結構體:

struct

node1;

在記憶體分配的時候,char佔乙個位元組,int 佔四個位元組。

c語言在進行記憶體分配的時候,需要根據最大的寬度來進行分配。如我們例子中,int需要4個位元組,在分配char型的時候,雖然char只占用乙個位元組,但是也需要從4個位元組的位置開始分配。

分配的記憶體如下:

a -   

-   

-  b               

c   

-   

-   

-   

a分配結束後,要自動填充3個位元組,再分配b,然後是c,再自動填充3個位元組。

所以node1這個結構體的寬度是12

我們盡量把對邊界要求嚴格的字段放在前面,要求弱的放在後面(強弱就是相對於寬度對齊來說):

struct

node1;

b     ac

--這樣,先分配int,再分配char,雖然每次申請4個位元組,但是最後的長度卻是8,因此節省了33%的位址空間。

//

test1107.cpp : 定義控制台應用程式的入口點。

//#include

"stdafx.h

"#include

"stdio.h

"#include

"string.h

"typedef

struct

node1;

typedef

struct

node2;

intmain()

最後輸出:14

8 12

posted @

2013-11-14 22:07

xingoo 閱讀(

...)

編輯收藏

結構體的優化宣告

宣告乙個結構體的時候,因為考慮到記憶體的對齊。例如,int型的變數,需要4個位元組,那麼它在儲存的時候就需要在位址能夠被4個位元組整除的地方開始申請。例如我們申請下面這樣的乙個結構體 struct node1 在記憶體分配的時候,char佔乙個位元組,int 佔四個位元組。c語言在進行記憶體分配的時...

C 中結構體的宣告

定義 結構是使用者自定義的值型別 樣式 struct pair struct pair struct pair 可以有結尾分號 注意事項 結構是c 程式設計師用來定義自己的值型別的最普遍的機制。結構比列舉更強大,因為它提供函式 字段 建構函式 操作符和訪問控制。結構成員的預設訪問許可權是privat...

Oh My C Diary 結構體變數的宣告

1 先定義結構體型別,再定義結構體型別變數。例如,日期型別可以定義為 struct date date yesterday,today,tomorrow 說明了3個日期型別的變數 yesterday today和tomorrow 2 定義型別的同時宣告變數。例如,struct date yester...