C++我幾乎沒用過,所以如果我解釋錯誤,請別見怪! 而上面的程式,temp[]只有3塊空間,應該沒辦法存取temp[][],所以要使用多維陣列,直接new一個多維陣列即可 . 一個陣列,基本上是指一整塊連續的記憶體,假設宣告ARRAY[2][3],我們在ARRAY[1][1]中存取,實際上來說,是以ARRAY為區段,存取索引值第2x2=4個單元裡面的東西,為什麼會這樣呢?因為以目前一般的計算機硬體結構來說,只有一維陣列,無論是DRAM或硬碟都是一維陣列,陣列的宣告只是告訴compiler寫程式的人要怎麼看待這塊記憶體,是為了讓寫程式的人管理更方便。 . new與malloc是屬於執行期間動態配置,在embedded system上使用要特別小心,compiler內有一個選項叫做heap memory,就是設定memory allocation記憶體大小,當我們使用new或malloc得到的pointer就是從這塊記憶體刮出來的,設大了浪費,小了有爆掉的危險,不使用也可以關閉。 . 因為目前來說embedded system記憶體比較不足,記憶體管理也沒那麼聰明,且動態分配會造成記憶體斷離的問題,是有配置失敗的可能發生,一般來說embedded system是有可能放置在不容易取得的地方,例如某圍牆頂端,假設此時機器某個task死掉,watch dog機制也不夠完整,那要reset就不是那麼容易了。 . 不過有時設計出某些api一定要有open,close等等的動作,就一定會使用到動態配置,所以也不用對記憶體動態配置視若洪水猛獸,該考慮的都考慮到就好了!
|