多維動態記憶體問題 |
答題得分者是:syntax
|
small7011
一般會員 發表:19 回覆:34 積分:10 註冊:2007-07-24 發送簡訊給我 |
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
qjzy2008
一般會員 發表:0 回覆:1 積分:0 註冊:2008-09-17 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
不見得
1. 就宣告字面上與程式碼上,是不相同的,但也只限於此 [看法上的不同] 2. 就實際的記憶體來說,沒什麼差別,就是一個區域而已 3. 不一定會不連續分佈(就是一個區域而已),(分開宣告,可能會連續,也可能會分散,同時宣告,一般是連續,但,你能保證一定是連續嗎?去看看 OS 的書吧,大到一個程度,就不連續了,更不用說會被 Paging) (依據 OS 的作業方式,一個連續區域,有可能分散在不同的實體區域,但看起來,連續,用起來,也連續,所以底層技術不在這裡說明)所以要看你所謂的連續,是什麼,邏輯連續?還是實體連續?是個體執行空間?還是總體執行空間? 所以,都對,也都不完全對,只端看你用什麼角度來理解,沒有正確答案,只有「不會出錯/當機」的用法(而且用法不只一種) 簡單化一下,假設,方法1 與 2 都是取得連續配置的記憶體空間 (邏輯連續),取得一塊 6 x 9 = 54 的空間 如果是二為陣列 x = 0~5, y = 0~8 則 ptr[x][y] 兩種 ptr[5][2] 都可以存取到 x = 6, y = 3 的位置 位置 18 同樣看成一維陣列 ptr[17] 也都是第 18 個位置 (ptr[17][0], ptr[17], ptr[0][17]) 因為對電腦而言,都是相對 ptr 的位置,至於到底幾維?看你如何分堆、分組 以上我也可以用 ptr = ptr 17,ptr[0] ; ptr[2][1][2],都是同一個位置 ,你還可以再分下去 ptr [] [] [] [] [] ... 但有意義嗎?只是浪費 Compile 在計算位址的時間,直接用 ptr[17] 如果一定要用 x,y,可以 x = 5, y = 2 location := (x 1) * (y 1) - 1; (不過這樣,還是一種效能上的耗損) ptr[location] 幾維,有那麼重要嗎?就是因為都只在意幾維,所以大家指標都學不好,忽略本質,怎學得好? 思考一下 int *i 與 int**i 與 int ***i 與 int ****i ..... 除了宣告的意義上不同,用起來真的就不同了嗎? 最後還不都是一個指標,只指到一個位置,該位址是數字、是字串起點、是另一個指標,還不都是一個數值而已 是什麼是我們賦予的 所以用完整的宣告,可以讓程式碼「比較」看得懂,但是還是比不上良好的註解,所以我管他幾維,我都用 一個 * 來處理 若真的要分,我只能說,一次宣告一大塊記憶體,會比「分次」宣告小塊記憶體來得快,釋放也快,但是分批宣告,可以分批釋放,你說,那個好? 我說,根據需求,適用當下的,最好 ===================引 用 qjzy2008 文 章=================== 不相同,第一種在記憶體中是不連續分布的,而第二種卻是一快連續分布的區域,故您在訪問時這個陣列時的方式是不一樣。 |
small7011
一般會員 發表:19 回覆:34 積分:10 註冊:2007-07-24 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
SYNTAx寫了好多的感言,應該是感受很深吧!? ^ ^ 不過我也很認同他講的!!
我補充一下看法: 在win 32 flate paging mode的記憶管理下,user mode 程式若要用到二維以上的必要性就剩下動態釋放記憶體的考量了。若記憶體的總需求量不是很大,那一定選用1維的。不僅管理方便,access快,也很容易看懂。 但system kernel mode的程式就可能要常用二維或以上的了,因為他要在有限的physical memory去處理多工。比如說paging這個機制就用到3-4層的區塊,os要去maintain這個table,並把page (logical space)映射至 frame(phyical space)。 user mode下就如syntax說的,都是連續的,你不用去管(也無法管)真實的連續性問題,反而要管量的問題。以量的考慮為主來決定是否要多維釋放。
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |