Re: [問題] 請問malloc, calloc這類c語言在assembl …

看板ASM (組合語言)作者 (我達達的馬蹄~)時間16年前 (2008/07/27 16:03), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《king19880326 (OK的啦~我都可以接受)》之銘言: : 這學期學了組語 : 在課堂上老師解釋的時候 : 時常會拿c語言跟組語之間的轉換來給我們作為比較 : 可是我最近在寫的時候突然發現 : 如果說, 一個c程式對於變數的靜態宣告 : ex. int a = 5 : 其實就是在組語程式的最前面, 先給了一塊變數位址 : 那動態的呢(ex. malloc, calloc)?? : 翻了整本教科書, 實在想不到什麼組語的指令可以做到這件事 OTZ 這個問題的答案有點複雜 可以直接回答 沒有指令可以做到分配動態記憶體空間這件事 XD 怎麼說呢 請聽我細細道來 在我們寫了一個程式之後 我們會把這個程式編譯成一個執行檔 比如說一個elf檔 這個elf檔裡面會有一些資訊告訴我們一些事情 像是entry point(程式開始執行的位址) 還有stack pointer跟heap的起始位址 還有bss跟一些有的沒的的訊息 我們開始執行程式之後 OS就會把它load到記憶體裡面 然後會根據上面講的那些訊息 作一些處理 而我們在程式中 如果呼叫了一個malloc函式 這個函式就會去呼叫底層的system call 發system call去做這件事 以glibc的做法好像是 如果空間不太大就呼叫sbrk的 system call 如果空間太大就呼叫mmap的system call 然後OS 會根據這些system call 去分配一塊記憶體空間給這個程式 如果是malloc這種動態要的 就會分配在 heap指的 位址下面 這塊空間OS會幫你的程式管理避免其他程式再用到同一塊位址 然後你的程式就可以使用這個位址了 大致上就是這樣 結果說了老半天還是沒說到 組語會做什麼事 組語其實就是會去設定heap的位址這樣而已 把heap的位址設出來 就可以用了 以上講的都是有OS並使用glibc的作法 如果是在沒有OS的情況下要malloc記憶體 使用的是newlib的話 newlib就不會去幫你管理記憶體空間了 記憶體空間 會是你怎麼要就可以怎麼用 管理記憶體空間這件事就要程式自己去做了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.223.44

08/01 12:48, , 1F
推!!
08/01 12:48, 1F
文章代碼(AID): #18Z2lIfx (ASM)
文章代碼(AID): #18Z2lIfx (ASM)