2011-07-28 30 views
0

方向疊層(更高的存儲器地址,以降低存儲器地址或從較低的內存地址到較高的存儲器地址)的依賴於機器架構 例英特爾:更高的存儲器地址,以降低存儲器地址 SPARC:較低的內存地址到較高的內存地址方向堆疊更高的存儲器地址的,以降低存儲器地址

有沒有什麼辦法可以通過代碼改變堆棧內存分配的方向。

謝謝。

回答

0

一般來說,堆棧的管理是由編譯器(假設我們正在談論像C或C++這裏)進行。但是,ISA可能會提供幫助,例如x86上的pushpop指令。

除非編譯器提供了非可移植的語言擴展或命令行選項來控制此操作,否則無法從C或C++執行此操作(我看不出爲什麼會這樣做),因爲更改此操作會使你的程序/庫和其他程序/庫不兼容!)

+0

我一直在尋找相同。通過C代碼進行更改。並且還提到爲函數參數,局部變量創建的堆棧。 – NoName

+0

@NoName:是的,這也是我所指的堆棧。 –

0

堆棧是用於在機器指令級。您無法使用代碼更改處理單元行爲。人們唯一能做的就是創建程序仿真級別。

0

一些處理器包括明確的電路,它推的東西入棧和彈出他們在各種情況下。其他處理器不包括用於「大」堆棧的任何這樣的電路,但僅提供用於存儲返回地址之類的東西的有限數量的硬件寄存器或電路,並且可能是軟件可以複製存儲在那些寄存器或電路到存儲器的其他部分。

上的處理器,其硬件不明確操縱內存堆棧,可以使用任何模式的一個想如果一個人控制所有代碼的處理器將執行。然而,通常情況下,處理器製造商會推薦一種實現堆棧的模式,編譯器或其他人員生成的代碼很可能會使用以這種方式實現的堆棧。