宣告乙個結構體的時候,因為考慮到記憶體的對齊。例如,int型的變數,需要4個位元組,那麼它在儲存的時候就需要在位址能夠被4個位元組整除的地方開始申請。
例如我們申請下面這樣的乙個結構體:
structnode1;
在記憶體分配的時候,char佔乙個位元組,int 佔四個位元組。
c語言在進行記憶體分配的時候,需要根據最大的寬度來進行分配。如我們例子中,int需要4個位元組,在分配char型的時候,雖然char只占用乙個位元組,但是也需要從4個位元組的位置開始分配。
分配的記憶體如下:
a -
-
- b
c
-
-
-
a分配結束後,要自動填充3個位元組,再分配b,然後是c,再自動填充3個位元組。
所以node1這個結構體的寬度是12
我們盡量把對邊界要求嚴格的字段放在前面,要求弱的放在後面(強弱就是相對於寬度對齊來說):
structnode1;
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...