[問題] sizeof(size_t) 之倍數

看板EE_DSnP作者 (vin)時間12年前 (2011/11/18 14:12), 編輯推噓2(206)
留言8則, 2人參與, 最新討論串1/3 (看更多)
因為想了一個晚上 雖然有聽老師講過、爬過文 但感覺還是沒有完全地了解 不太敢隨便下手 所以想要請教大家一下 我知道要取sizeof(size_t)之倍數記憶體的原因 是為了做到platform dependent 因為系統在new的時後 會對齊size_t為倍數的位置 但在作業中 我們先自己跟系統要一塊memory 來後再根據new多少再來分配記憶體 但這裡我不是很清楚的是 為何對自己要到的記憶體 不能依照真正object大小來要 而是也要跟系統一樣要sizeof(size_t)為倍數的記憶體大小呢? 舉例說: 一開始可能將0x00000000~0x00000007位置的記憶體分配出去 然後下次再從0x00000008開始開始 原因是因為 就算是我們自己已經要來的MemBlock, 也無法aceess/或是指到非sizeof(size_t)倍數的記憶體? 還是說只是單純要模仿機器每次都切齊sizeof(size_t)倍數的記憶體位置呢? 或是另有其它隱情? 不好意思小的觀念不清 懇請解惑 感激不盡 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.25.106 ※ 編輯: vincere 來自: 140.112.25.106 (11/18 14:13)

11/18 15:37, , 1F
因為new[n]的時候 系統會要求對齊後bytes*n+SIZE_T
11/18 15:37, 1F

11/18 15:38, , 2F
所以中間一定會有一些零碎bytes是系統會空掉的
11/18 15:38, 2F

11/18 16:18, , 3F
所以意思是說 假如我在new的過程中 想要拿memory block中
11/18 16:18, 3F

11/18 16:20, , 4F
*(_ptr+5)所相對的記憶體時沒辦法的?而是它會要求對應的
11/18 16:20, 4F

11/18 16:22, , 5F
*(ptr+8)開始的位置?如果我強制assign給它程式是否會
11/18 16:22, 5F

11/18 16:22, , 6F
crash掉?如果想錯懇請糾正
11/18 16:22, 6F

11/18 17:19, , 7F
應該是沒辦法 因為new operator會自動用他的!
11/18 17:19, 7F

11/18 17:32, , 8F
感激:) 似乎比較瞭解了
11/18 17:32, 8F
文章代碼(AID): #1EnVSvkR (EE_DSnP)
文章代碼(AID): #1EnVSvkR (EE_DSnP)