看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) 我有一個struct如下: typedef struct Node{ int key; int degree; struct Node *leftchild; struct Node *rightsibling; struct Node *parent; }node; 每當需要的時候才會動態配置記憶體(malloc),弄一個node出來。 這個struct算一算應該是佔5*4=20bytes。sizeof(node)也得到20,表示無誤。 但很神奇的地方是,我連續兩次malloc,弄兩個node出來, 第一個node他的起始位置是:0x7f1070 第二個node他的起始位置是:0x7f10a0。 這中間卻差了30個bytes,跟原先預估的20bytes不合。 想藉這機會請問一下,codeBlocks有辦法讓它顯示0x7f1070到0x7f10a0這樣連續記憶體 區域的內容嗎? ←這其實是我比較想問的XD 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) CodeBlocks 8.02 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.230.240
james732:malloc 並沒有說連續兩次要來的記憶體會連續吧...?? 12/26 18:22
flax00298:MALLOC丟出去就是OS的事情了吧?在HEAP本來就不一定 12/26 18:29
flax00298:會連續喔 12/26 18:29
flax00298:另外問一下...我怎麼算出來是60BYTES? 12/26 18:31
bil193:原來malloc丟出去就是os的事了... 那個struct因為有兩個 12/26 18:48
bil193:int,各是4 bytes,而point不管指向什麼型態都是4 bytes 12/26 18:49
bil193:有5個4bytes 就是20bytes啦 12/26 18:49
bil193:另外還是想問CodeBlocks可以看連續記憶體位置的內容嗎? 12/26 18:50
flax00298:我是說兩POINTER相減 12/26 18:50
ledia:兩個相減是 0x30 = 48 bytes .... 12/26 21:02
sunneo:你還得看heap alloc alignment + heap header (4byte) 12/27 00:30
sunneo:記得gcc之後採用的dmalloc header overhead是4byte 12/27 00:31
final01:CodeBlocks 可以看阿 Debug ->Info中找找 12/27 12:26
bil193:謝謝樓上 在debug->examine memory裡找到了! 12/27 17:21