check alloc alignment

看板C_and_CPP作者 (就是愛希爾)時間8年前 (2017/05/25 15:05), 編輯推噓3(301)
留言4則, 3人參與, 最新討論串1/1
最近在使用lib在alloc記憶體時,會需要檢查當初alloc時的位址的alignment 如下面 #define alignof __alignof #define ISALIGNED_N(ptr, n) (((uintptr_t)(ptr) & ((n) - 1)) == 0) if (!ISALIGNED_N(mem, alignof(unsigned long long))) printf(“check align fail!\n”); else printf(“check align ok!\n”); 很好奇為甚麼下面位址都是check align ok alignof(unsigned long long)不是代表位址可以被8整除嗎? 0x7f4a5c0191cc 0x7f4a5c0391e4 0x7f4a5c0591fc 0x7f4a5c079214 0x7f4a5c09922c 0x7f4a5c0b9244 0x7f4a5c0d925c 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.44.157.15 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1495724716.A.73A.html

05/26 00:19, , 1F
你可能把 sizeof 跟 alignof 搞混了
05/26 00:19, 1F

05/26 00:21, , 2F
一個東西比較大並不代表它就要排在大位置
05/26 00:21, 2F

05/26 02:25, , 3F
位址比較大小沒有意義
05/26 02:25, 3F

05/26 06:38, , 4F
不一定會被8整除阿
05/26 06:38, 4F
文章代碼(AID): #1P9lAiSw (C_and_CPP)