首先看一段程式:
#include
int main()
看輸出結果:
0x7fff52499ad8
// a
0x7fff52499ad4
// b
0x7fff52499ad0
// c
可以看到,在棧上分配的int資料,記憶體位址是往下增長的。
// 堆上儲存
int *pa = (int*)malloc(sizeof(int));
int *pb = (int*)malloc(sizeof(int));
int *pc = (int*)malloc(sizeof(int));
printf("%p\n",&pa);
printf("%p\n",&pb);
printf("%p\n",&pc);
結果發現輸出:
0x7fff5c5eeac8
// pa
0x7fff5c5eeac0
// pb
0x7fff5c5eeab8
// pc
因此,在本機(macos)測試下,堆、棧的分配都是位址遞減,和我想的不太一樣。。
所以只能說概念。
我們假設位址從左往右增長,或者從上往下看增長。不管怎樣,我們就帶著這樣的視角。
按照大端序的說法,大端序裡乙個字的高位位元組(左邊)存在記憶體的低位址處。所以,對於乙個數字0x12345678, 12是最高位的位元組,因此存在位址的最左邊,因為我們假定了位址從左往右增長,左邊位址最小。 這樣一次進行,所以大端序下看起來非常符合我們的直覺。
因此,稱之為:大自然!
小端序是反著來的,留待各位舉一反一吧。
其實是,這種只有兩種情況的,記住乙個的效率高且準確。
以上。
小端模式和大端模式 大端模式和小端模式
0x123456在記憶體中的儲存方式 大端模式 低位址 小端模式 低位址 不難看出大端模式比較符合人的直觀認識 1.一開始是由於不同架構的cpu處理多個位元組資料的順序不一樣,比如x86的是小段模式,keil c51是大端模式。但是後來網際網路流行,tcp ip協議規定為大端模式,為了跨平台通訊,還...
大端模式和小端模式
大端模式和小端模式 在c語言中除了8位的char型之外,還有16 位的short型,32 位的long型 要看具體的編譯器 對於位數大於8位的處理器,例如16位或者32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然 存在著如何將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。大端模...
大端模式和小端模式
所謂的大端模式,是指資料的低位 就是權值較小的後面那幾位 儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 所謂的小端模式,是指資料的低位儲存在記憶體的低位址中,而數 據的高位儲存在記憶體的高位址中...