對上文堆疊的補充分析

2021-10-07 09:36:24 字數 1252 閱讀 8737

堆疊的設定

關於堆疊的設定,codewarrior提供了兩種方式:**「stacksize」命令方式和「stacktop」命令方式。這兩種方式在同乙個.prm檔案中,不能同時存在。**當使用者只關心堆疊的大小而不關心堆疊的存放位置時,推薦使用stacksize方式。 系統預設的方式為使用stacksize方式。

stacksize命令方式:

當使用stacksize命令方式時,如果在placement-end部分宣告了「sstack into ram」,這樣的話,堆疊區就被放在ram區域的起始部分,下面的例子說明了這種方式:

例5segments

„„ram = read_write data_near 0x2000 to 0x3fff;

„„end

placement

„„sstack, paged_ram, default_ram into ram;

„„end

stacksize 0x100

上面的例子將堆疊區域存放的位址為0x20ff-0x2000,初始的堆疊指標指向棧頂位址0x20ff。

分析:為什麼是0x20ff,因為0x2000加上0x100(可以看做0xff,因為起始位址就是終止位址相當於少乙個自己的理解)

相反,如果在placement-end部分沒有宣告「sstack into ram」,則堆疊被分配在ram區域中已分配空間的後面。請參見例6。

例6segments

„„ram = read_write data_near 0x2000 to 0x3fff;

„„end

placement

„„paged_ram, default_ram into ram;

„„end stacksize 0x100

在這個例子中,如果ram區域中已經分配的變數占用了4個位元組(從0x2000到0x2003)(每個位址存1個位元組的資料,所以四個位元組),則堆疊放在這四個位元組的後面,從0x2103到0x2004,初始的堆疊指標指向0x2103。

0x2103=0x2004+0x100(0xff)

stackyop命令方式: 當使用stacktop命令方式時,如果在placement-end部分宣告了「sstack into ram」,同樣,堆疊區就被放在ram區域的起始部分,初始的棧頂則由stacktop指定。若沒有相應的宣告,則初始的棧頂由stacktop指定,而堆疊的大小則根據處理器的不同由編譯器自行設定,其大小足夠裝下處理器的pc暫存器的值。

DDL的定義,對上文的補充

資料定義語言 資料定義語言 ddl 是 sql 的子集。它是用於描述資料庫中的資料及其關係的語言。您可以在指令碼中生成 ddl,供資料庫物件 保留資料庫結構的快照 設定乙個資料庫充當生產系統,但不包含資料的測試系統 為您可根據現有物件建立的新物件生成模板。例如,為 customer 表生成 ddl,...

關於堆疊的簡單分析

關於堆疊的簡單分析 片 public static void main string args private static void swap integer num1,integer num2 執行結果 before swap a 1,b 2 after swap a 1,b 2 大家會發現其中...

一次堆疊溢位的分析

在專案開發過程中,我會經常查一些引起程式崩潰的問題。就在前段時間,測試組反饋了乙個現象,當對某乙個功能進行拷機的過程中,大約進行了半個小時之後,程式就會引起崩潰,經過數次的重複測試,均出現了以上現象。經過對崩潰日誌的初步分析,我發現,雖然每次崩潰的地方一致,但通過閱讀原始碼,我發現那些地方一般是不會...