對十六進製制和按位操作,總是糊塗,所以實際測試下:
我的理解,不一定全部正確:
32位的系統上,(都以32位系統為例)
乙個int型是4個位元組,所以0x3是 0x0003,四個位元組,其中3代表乙個位元組(8個二進位制位)00000011,0就是00000000了。
乙個指標也是4個位元組,這個程式裡頭列印 的很多都是指標型別的值:
比如 [5d2f70] ,是4個位元組的十六進製制數。
對0x03取反,得到的也是乙個十六進製制的數: [fffffffc]
malloc出來的位址,多次執行,最後乙個位元組,都是0,所以每次與,都還是0,buf與prealbuf一直都是相等的。
不太懂了 。。。。。
#include#includetypedef struct _ringbufferringbuffer;
void testalign8(ringbuffer **prb,int capacity)
{ ringbuffer *rb;
rb=malloc(sizeof(ringbuffer));
if(rb==null)
{printf("not enough memory\n
位元組對齊 8位元組對齊
參考博文 參考1 參考2 參考3 在記憶體管理中經常使用位元組對齊來管理分配的記憶體。1 原理 2 演算法 2.1unsigned intcalc align unsigned int n,unsigned align 2.2 更好的演算法 unsigned intcalc align unsign...
8位位元組對齊演算法
參考文章 8bit對齊演算法 void testalign 1byte 1位元組對齊 unsigned int align8bit unsigned int n 2byte 2位元組對齊 unsigned int align16bit unsigned int n 4byte 4位元組對齊 unsi...
詳解4位元組對齊
摘要 編譯器通常採用的預設位元組對齊規則 對於型別t,在n bit系統中,保證變數首位址在min sizeof t n 8 位元組位置上,以保證最少讀週期。以下為原文 其實我也是一條分割線 所謂的位元組對齊,就是各種型別的資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這個就是對齊。我...