2011-06-01 64 views
4

我試圖將C庫移植到嵌入式平臺(Xilinx Microblaze),並且該庫包含對malloc(),alloc(),calloc()和自由()。刪除動態內存分配 - 從嵌入式C程序

這些函數會調用額外的庫來導入到嵌入式平臺,並會使程序代碼變大。

什麼是從C程序中刪除動態分配並僅使用靜態分配的最佳步驟。我應該找出哪些事實,我應該做什麼計算?任何提示都歡迎。 malloc調用的

例如:

decoder->sync = malloc(sizeof(*decoder->sync)); 
    if (decoder->sync == 0) 
     return -1; 

非常感謝,

猶太

+0

你是怎麼解決的! – 2016-03-08 18:41:02

回答

5

有兩個問題要處理轉換的動態內存分配時(runtime)時,靜態分配(編譯時間) 。首先,編譯器顯然必須知道在編譯時需要分配多少內存。在上面的例子中,它看起來像任何decode-> sync指向的是一個常量大小,所以它不應該是一個問題。但是,如果您爲可變長度數據序列的字節數組分配內存,則會出現問題。你要麼爲最大可能的數據長度分配足夠的數據,要麼將數據分成大塊,或者......希望你明白這一點。

另一個問題是堆與堆棧。所有動態內存分配都來自堆。非全局靜態內存分配來自堆棧,並且在嵌入式環境中堆棧可能非常小。這意味着如果內存分配是中到大的話,你可能需要使其成爲全局或「靜態」(本地範圍的靜態變量也從堆中出來),以避免堆棧溢出,即使該變量不會需要成爲全球性的。

希望這是有道理的。