Re: [問題] 請問malloc, calloc這類c語言在assembl …
※ 引述《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
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章