[問題] malloc與速度問題

看板C_and_CPP (C/C++)作者 ( )時間14年前 (2011/10/17 16:54), 編輯推噓1(1012)
留言13則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) gcc 問題(Question): 我有 頻繁的重覆使用某 function 裡面會用到 一個很大的一維陣列 int func() { static int arr[100000]; ... } 期待他的int 空間不要在func消失而消失, 可以重複使用, 減省時間 資料可以不用initial 但是這個size 100000會變, 改用malloc的話該怎麼辦? { static int *arr; arr = malloc(sizeof(int)*100000); // ??? } 補充說明(Supplement): for 效率 & time考量 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.23.86.187 ※ 編輯: Ohwil 來自: 211.23.86.187 (10/17 16:54)

10/17 17:00, , 1F
1. 多設 size variable. 2. *arr 初始為 null.
10/17 17:00, 1F

10/17 17:01, , 2F
3. if(size<need) 釋放,重新配置.
10/17 17:01, 2F

10/17 17:02, , 3F
第一次釋放是視 arr 是否為 null..
10/17 17:02, 3F

10/17 17:05, , 4F
可以一直用同一個static arr,另一個變數存有效的size
10/17 17:05, 4F

10/17 17:11, , 5F
重新配置 realloc;或是砍掉原先空間->再malloc給arr
10/17 17:11, 5F

10/17 17:11, , 6F
喔喔, 我試試, 感謝
10/17 17:11, 6F

10/17 17:12, , 7F
不過malloc, realloc, free這些可能會動到OS的東西
10/17 17:12, 7F

10/17 17:12, , 8F
呼叫的成本相對一般函式都會比較貴
10/17 17:12, 8F

10/17 17:14, , 9F
我想到一個問題..上敘方式算是有mem leak 嗎?雖不嚴重
10/17 17:14, 9F

10/18 09:25, , 10F
如果頻繁用到這個func裡面的arr,那用global variable
10/18 09:25, 10F

10/18 09:26, , 11F
還有空間要擴增的話,realloc是好方法,如果要複製內容的
10/18 09:26, 11F

10/18 09:28, , 12F
話,你該用memcpy. 並且記得釋放空間.不然就沒效率
10/18 09:28, 12F

10/18 17:21, , 13F
改用functor如何?
10/18 17:21, 13F
文章代碼(AID): #1Ec-qkRW (C_and_CPP)
文章代碼(AID): #1Ec-qkRW (C_and_CPP)