Fortran 板


LINE

PS,我剛打完才發現我舉的例子中A是一維陣列,B是三維陣列,跟你原文相反... ※ 引述《iohan (iohan)》之銘言: : 假設 : integer A(10,10,10) : integer B(1000) : 結構上看起來用的記憶體要一樣 : 但是我聽到有種說法是A使用的記憶體會比B還來的大!? : 實際上是??? : 另外就是B的元素在記憶體上的分布是連續的這點不用質疑 : 那麼A呢?? 也是連續的阿 假設B陣列是2*2*2的大小 那B陣列在記憶體裡的排列順序,以FORTRAN來說就是 B(1,1,1)、B(2,1,1)、B(1,2,1)、B(2,2,1)、B(1,1,2)、B(2,1,2)、B(1,2,2)、B(2,2,2) 至於使用的記憶體大小,我不太確定 至少在儲存陣列內的元素值所占用的記憶體大小是一樣的 但是有聽說陣列會另外儲存陣列維度上下限的值 所以DEBUGER才能檢查出是否有呼叫到超出當初陣列宣告時大小的陣列元素 一維陣列只要記錄一個方向的上下限,以A陣列來講就是紀錄1跟1000兩個數字 三維陣列要記錄三個方向的上下限,以B來講就是紀錄1、10、1、10、1、10六個數字 所以說三維陣列用到的記憶體會比一維陣列大一些 不過這點我是真的很不確定,只是聽說的 因為實際上DEGUGER檢查程式裡是否有呼叫到超出陣列大小的元素的功能是可以關掉的.. 而且不同語言的可能作法也不同 : A(i,j,k) : 書上說按照 i -> j -> k 的順序下去讀是連續的 : 但是聽到上面第一種的說法害我開始懷疑B的連續性... : 假如真的是連續的 : 那麼A從1讀到1000 : 跟B從(1,1,1)讀到(10,10,10) : 速度上會有差?? ( 我在實際應用上的矩陣B可能是300*300*300 我自己認為還是有差的 因為所謂的陣列,其實只是一個指標而已 這個指標紀錄了陣列第一個元素在電腦記憶體裡的位址 我們呼叫陣列裡某個元素時,電腦只是根據這個陣列第一個元素的記憶體位址, 去計算出我們呼叫的元素在哪個記憶體位址裡,再去該記憶體位址取值 譬如你舉的例子,A是大小1000的一維陣列,B是大小10*10*10的三維陣列 對電腦而言,A這個變數,他記錄的是A(1)在記憶體裡的位址 B這個變數,他紀錄的則是B(1,1,1)在記憶體裡的位址 電腦要呼叫A(10)的值,他必須去計算A(10)所在的記憶體位址跟A(1)之間的關係 找到A(10)的記憶體位址,才能取出該記憶體位址的值,也就是A(10)的值 譬如如果我們同樣呼叫兩個陣列第一個元素所在位址的後面第500個元素 在A陣列就是A(500)的值,B陣列就是B(10,10,5)這個元素的值 理論上電腦一開始並不會知道A(500)跟B(10,10,5)都是陣列的第500個元素 那電腦在呼叫A(500)時, 因為電腦只記錄A(1)的位址,所以為了要得知A(500)所在的記憶體位址 他必須要做計算:A(500)所在記憶體位址 = A(1)記憶體位址 + 500 - 1 也就是一個加號的計算跟一個減法 而電腦要得知B(10,10,5)的記憶體位址,他必須要做計算: B(10,10,5)所在記憶體位址 = B(1,1,1)記憶體位址 + (5-1)*100 + (10-1)*10 + (10-1) 他必須要做2個乘法、3個加法、3個減法的計算,才能取得B(10,10,5)的值 在評估計算速度時, 為了簡化,我們通常會假設乘/除速度遠遠大於加減,所以只考慮乘/除的計算 因此可以很明顯看出,明明都是呼叫第500個元素的值, 三維陣列B所需要的時間會比一維陣列A多 因此理論上三維陣列的呼叫會比一維陣列慢 這是我自己的見解,若有誤,還請其他版友糾正 : 補個計概問題 : 請問一下電腦在執行指令時 : 不同的動作之間的速度比大概是怎麼樣的一個情況呢? : ex. : 浮點相乘: xxx Hz / s : 浮點相除: ooo Hz / s : 邏輯判斷: !!! Hz / s : 讀記憶體: ??? Hz / s : 寫記憶體: @@@ Hz / s : 掃記憶體: ... Hz / s --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.136.129.101
1F:推 iohan:感謝解答 10/01 00:51







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP