//sizeof面試題1.cpp
//what is the output of the following code?
//[美國某著名計算機軟硬體公司面試題]
#include
#include
#include
using namespace std;
structa;
structb;
int main()
//解析:
//ss1是乙個字元指標,指標的大小是乙個定植,就是4。
//q2裡面有乙個"/n","/n"算做一位,所以它的空間大小是3。
//a 和b是兩個結構體。在預設情況下,為了方便對結構體內元素的訪問和管理,當結構體內的元素的長度都
//小於處理器的位數的時候,便以結構體裡面最長的資料元素為對齊單位,也就是說,結構體的長度一定是
//最長的資料元素的整數倍。如果結構體內存在長度大於處理器位數的元素,那麼就以處理器的位數為對齊
//單位。但是結構體內型別相同的連續元素將在連續的空間內,和陣列一樣。
////結構體a中有3個short型別變數,各自以2位元組對齊,結構體對齊引數按預設的8位元組對齊,則a1、a2、a3都
//取2位元組對齊,sizeof(a)為6,其也是2的整數倍。b中a1為4位元組對齊,a2 為2位元組對齊,結構體預設對齊引數
//為8,則a1取2位元組對齊;結構體大小6位元組,6不為4的整數倍,增加到8時,符合所有條件,則sizeof(b)為8。
////cpu的優化規則大致原則是這樣的:對於n位元組的元素(n=2,4,8,...) ,它的首位址能被n整除,才能獲得最好的
//效能。設計編譯器的時候可以遵循這個原則:對於每乙個變數,可以從當前位置向後找到第乙個滿足這個條件
//的位址作為首位址。例子比較特殊,因為即使採用這個原則,得到的結果也應該為6(long的首位址偏移量0000
//,short首位址偏移量0004,都符合要求)。但是結構體一般會面臨陣列分配的問題。編譯器為了優化這種情況,
//乾脆把它的大小設為8,這樣就沒有麻煩了,否則的話,會出現單個結構體的大小為6,而大小為n的結構體
//陣列大小卻為8*(n-1)+6的尷尬局面。ibm出這道題並不在於考查理解語言本身和編譯器,而在於應聘者對
//計算機底層機制的理解和設計程式的原則。也就是說,如果讓你設計編譯器,你將怎樣解決記憶體對齊的問題。
//sizeof面試題2.cpp
//what is the ouput of the following code?
//[德國某著名電子/通訊/it企業2023年11月面試題]
#include
using namespace std;
class a;
class a2;
struct b;
struct c;
struct d;
int main()
;class a2;
class a3;
class a4;
class a5;
int main()
//這是用vc編譯後的執行結果:
// 0x0012ff7c
// 0x0012ff7b
// 0x0012ff80
//變數在記憶體中的順序:b(1位元組)--a(4位元組)--c(4位元組)。
//這是用dev c++編譯後的執行結果:
// 0x0022ff7c
// 0x0022ff7b
// 0x0012ff74
//變數在記憶體中的順序:c(4位元組)--中間相隔3位元組--b(佔1位元組)--a(4位元組)。
//這是用lcc編譯後的執行結果:
// 0x0012ff6c
// 0x0012ff6b
// 0x0012ff64
//變數在記憶體中的順序:同上。
//三個編譯器都做到了資料對齊,但是後兩個編譯器顯然沒vc「聰明」,讓乙個char佔了4位元組,浪費記憶體。
from:
C 面試題之i 面試題
i 面試題1.cpp 中國台灣某著名防毒軟體公司2005年10月面試題 int i 3,j 4 i?i j printf d d n i,j a.3 3 b.4 4 c.3 4 d.4 3 答案b i 面試題2.cpp 中國某著名計算機金融軟公司2005年面試題 int x 1,j 2 int k ...
sizeof面試題選
sizeof面試題選 linux c程式設計實戰 結構體和共用體的記憶體分配是c語言的乙個難點,也是面試題中的熱點。示例1 union data1 sizeof union data1 的值為16.在編譯器預設設定的情況下,該共用體最大基本型別為double,它佔8位元組,所以此共用體以8來對齊。字...
C語言面試題之華為面試題
1 區域性變數能否和全域性變數重名?答 能,區域性會遮蔽全域性。要用全域性變數,需要使用 區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同乙個函式內可以定義多個同名的區域性變數,比如在兩個迴圈體內都定義乙個同名的區域性變數...