2013-10-23 24 views
0

我一直在尋找這些問題,但找不到任何。功能和程序指令內存

1)函數聲明和定義本身是否存儲在堆棧中? 我知道它們的變量是什麼,但函數本身呢?

2)是什麼程序指令/文本區域指的是內存段的進程?例子?

回答

2

不可以。當您調用函數並從函數返回時,堆棧用於存儲函數調用順序和上下文。這也包括這些函數的局部變量。該堆棧位於內存的一個(最好是不可執行的)讀寫數據部分。

整個程序代碼本身(通常)在.text部分,它位於在只讀可執行存儲器。

如果你是在Linux上,檢查出readelf工具,它會告訴你所有關於你的ELF可執行文件是怎麼回事,當加載到內存中進行佈局。

如果您使用的是Windows PE Explorer將做同樣的事情,但它是過時的,不是免費的,不支持64位(PE32加)的可執行文件。

+0

.text區域與程序指令/文本區域一樣嗎?哪個在進程內存底部(最低)? – Newbie

+0

是的,你的程序代碼(二進制機器指令)。你問的是特定於實現的東西。查看一些編譯的可執行文件,看看它們通常是如何佈局的。 –

+0

謝謝。得到我需要的。 – Newbie

1

函數declsrations和definitions是句法結構,如逗號或一對括號。它們只存在於源代碼中,並不存儲在任何地方。

的函數,而另一方面,是什麼,存在在運行時,有一個地址。沒有指定地址在哪裏。就C而言,組合和數據屬於完全不同的地址空間。他們的地址不能混用。所以你甚至不能問它是否在堆棧中,問題是不明確的。

C沒有程序指令或分段或過程的概念,所以它是沒有意義的談論他們在C的情況下無論是。你需要指定你的架構師和操作系統,以便能夠談論他們。

+0

除非你用'-g'編譯:-) –