1樓:匿名使用者
1. 向量化。養成看到for就渾身不舒服的本能反應。
2. 矩陣如果太大了會爆記憶體則千萬別向量化,老老實實用迴圈吧。有些3-4緯的矩陣,用迴圈處理起來甚至快一些。
3. 迴圈豎著走比橫著走快。
4. 不少內建函式都有大量的error check。直接扒磨用profiler找出真正幹活的。
5. 不少內建函式在網上都有人提供了更快的版本的,當然功能弱一些,正好符合提速的需求。
6. 視情況,有時可以把變數強行變成single,速度暴增。
7. 利用copy on write的特點,丟進函式的變數能迅冊不對其修改就不要修改。
8. matlab就是個高階計算器,不要拿幹來處理檔案,往資料庫裡塞資料這種活。eval, object之類的東西能別碰就別碰,儘量保持著every is an array of double的模式。
9. 不要把**全塞到一行。不但難看有時候畝此巨集還慢一些。
2樓:匿名使用者
預分配記憶體簡介行雹:對於for,while迴圈,在迴圈的過程中每次不斷檔叢帆的增加資料鄭困結構的大小,影響了效能和記憶體的使用。
matlab 怎麼為變數分配記憶體
3樓:網友
1、建立和修改陣列——基本思想是保持記憶體的連續性。
1)當為陣列賦值時,matlab在記憶體中分配連續的虛擬塊,在另乙個地方,將陣列的型別和維數等儲存為頭資訊。
2)當向陣列增加新元素時,如果原來位置的連續記憶體區域可以容納新增加的資料,則擴大分配的記憶體,然後增加元素;如果連續塊不夠大,需要先重新分配能夠容納原有資料和新增資料的連續記憶體塊,再將原有資料拷貝到新分配的記憶體中(在此期間,記憶體中會有原來資料的兩份拷貝,增加了out of memory的風險),並新增新的元素到新的塊中,然後釋放原來的記憶體。
3)當刪除陣列元素時,先移除元素,再壓縮原來分配的空間。
2、陣列的拷貝。
1)當將乙個陣列賦值給另乙個變數時,不會為新變數分配記憶體,新變數只是到原來陣列的引用,直到新變數中元素值改變時,才會為其分配記憶體。
2)通過引數傳遞給函式的資料,當資料內容發生改變時才會分配記憶體,函式內部新的資料通過返回值傳遞給呼叫該函式的函式。
3、陣列頭。
1)由於陣列頭佔據儲存空間(雖然不多),資料存放在幾個大陣列中要由於存放在多個小陣列中。
2)對結構體和元胞(cell)陣列,matlab不僅為他們建立頭資訊,還為結構體的每個欄位和元胞陣列的每個元素建立頭資訊,因此結構題和元胞陣列消耗的記憶體與其建立方式有關。
3)whos函式只能檢視資料佔用的儲存空間,不會顯示頭資訊佔用的空間。
4、資料結構與記憶體。
1)8-bit、16-bit、32-bit、64-bit的有符號整型或無符號整型分別佔用位元組空間,單精度、雙精度浮點數分別佔用位元組空間。
2)複數的實部和虛部分別佔用存貯空間,當修改實部或虛部時,會同時複製實部和虛部。
3)當陣列的元素絕大部分為0時,用稀疏矩陣存貯以節省空間。
5、記憶體佔用計算。
1)元胞陣列佔用的空間計算方法為:(header_size x number_of_cells) +data,對於64位系統,header_size為112,檢視header_size的方法: a = , whos = , a = , a = }佔用的位元組數分別為:
2)64bit系統中結構體佔用空間的計算方法:fields x ((112 x array elements) +64) +data (32bit系統中將112改為60)。
新手求教MATLAB儲存問題,求教matlab問題
將 檔案型別改成jpg試試,即。這個名字,其中。fig 檔案,matlab是不知道有這種檔案型別的,建議換一種比較通用的 檔案型別例如jpg或png等。matlab問題,語句不用太多,較簡單,我是新手,求教。新手求指教,matlab有錯誤,求詳細講解,真心做不出來了 你把對a,b,c,da,db,d...
c語言記憶體分配問題,C語言記憶體分配問題
這個就要知道函式的工作原理了,你在呼叫malloc的時候建立了乙個p的副本presult此時,presult null 然後執行presult int malloc isize 那麼presult被賦值為動態記憶體的首位址malloc結束時presult又被 所以p的值又沒有相應改變。沒有用的,這樣...
記憶體分配訪問無效!!!!!!!!!!!!!!
在開始 執行 輸入msconfig 回車 點啟動 把有help的一項前面的勾去掉!重新啟動就好了!修復檔案系統錯誤,在用windows優化大師自動設定記憶體設到別的盤試試。系統相容問題。現在的話只能多試試其他版本的winxp系統。可能是系統問題,你重新裝個系統,在安裝遊戲看看。記憶體分配訪問無效 即...