今天在網上看見有人去騰訊面試,面試管問了一道關於C語言結構的問題,題目意思大概是:往C結構體裏面增加變量,插到那個位置比較好?前部、中部還是後部?
個人仔細研究了一下這個題目,發現面試官有可能在詢問面試者關於結構體內存對齊方式和使用效率方面的知識。
假設我們的結構體包括一個int a,char b,還有double c三個變量,按照三個變量定義先後不同順序,我們可以得到以前結構體:
struct A1
{
char a;
int b;
double c;
};
struct A2
{
char a;
double c;
int b;
};
struct A3
{
int b;
char a;
double c;
};
struct A4
{
int b;
double c;
char a;
};
struct A5
{
double c;
int b;
char a;
};
struct A6
{
double c;
char a;
int b;
};
我們在VS 2008運行的結果如下:
A1的空間大小爲:16
A2的空間大小爲:24
A3的空間大小爲:16
A4的空間大小爲:24
A5的空間大小爲:16
A6的空間大小爲:16
從運行結果可以看出,如果結構大小按照一定順序排列,得到結構體佔用內存空間比較小,否則佔用的內存空間比較大。由此我們可以得到這道題的答案是:如果原有的結構體是按照變量佔用空間從小到大(從大到小),我們插入的變量也佔用內存空間比較小則在結構體的前部插入(後部),否則插入結構體的後部(前部);如果結構體本身沒有順序,我們一般插入到後部,有利於修改。由此可以見,我們定義結構體的時候變量佔內存大小應該按照一定的順序排列,這樣定義後的結構體佔用內存控件比較少。(以上只是個人見解)