what is the side effect of declaring global variables.why the C/C++ cannot resolve the problem of out of bound access of array data請高手幫我回答一下上述兩個問題
2006-11-09 12:28:06 · 4 個解答 · 發問者 Anonymous in 電腦與網際網路 ➔ 程式設計
麻煩一下,不要複製網頁,請給我口語化的答案可以嗎
2006-11-09 12:45:06 · update #1
抱歉有關array data的部份可以用明確一點的講法嗎
2006-11-10 19:09:51 · update #2
C 規定 Global Variable 是放在 Heap裡!我上週上課時,老師說(我不相信)Heap 比 stake 慢一點。如果老師是對的,Side Effect (SE) 第一項就是:慢一點。C 規定:Global Variable 是有初值化的,初值為 0 ,且是跟著寫入 exe 檔裡。所以,第二個 SE 就是:有初值:0。而 ,第三個 SE 就是:exe檔會大一點點。第四個 SE 是:宣告/#include後,同一個 .C 檔之後的所有函數都可以讀/寫(就是改啦) 那變數的值。所以,不小心,那變數的值被誰誤改了,會不容易找到。術語:Information Hiding 不好。C++ 我不太熟,在這部份應該和 C 一樣。= = = = = = = = = = = = = = =C 是不能解決逸出陣列足標的問題。只能靠程式師自己小心。因為 C (C++也一樣) 講究快,任何有不同方法可以解決同一問題時,C採用快的方法,來定義語言的用法。若要 Compiler 〝幫忙〞解決這問題,快不了!所以,C的Compiler並不幫忙檢查這東東。C++可以!!!!所以,您老師弄錯了!C++足標和C一樣;但C++可以用vector, deque之類的東東解決這問題!v[i],和 C 一樣,沒檢查。v.at(i) 有檢查!代價:程式大一點、慢一點。好處:對足標、指標控制不好的程式師,省去不少 debug 的時間。我不是 C++ 的高手。C++ 提供 list, deque 〝應該〞是 物件導向 必備的東東,所以 C++ 2個方法都提供。
2006-11-11 01:37:11 補充:
我想,小四與novus補充得不錯。
版大對array data 還需要再補充嗎?
至於 heap,個人比較認同 novus 的說法。
再來就是 cache 的問題:heap太大,可能很難 always fit in cache (FIC)。
但若可以 FIC,配完了應該就與 stack 無異了。
2006-11-10 08:02:41 · answer #1 · answered by ? 7 · 0⤊ 0⤋
1. global variable 的好處是方便給各物件及函式使用,主要功能應放在其間
的溝通方面.若宣告太多 global 變數,程式小時看不出什麼問題.當程式大時,
或一個 project 包含很多程式(unit).則在管理上會出現很大的問題.到時會有
變數滿天飛,不知道要的變數在那裡
2. 因 C/C++ 屬比較低階的語言.而 array 是屬於自己規劃的記憶體管理.
若 C/C++ 幫你檢查 array 是否出界,將會大幅影響到整體的效率.
2006-11-11 07:21:57 · answer #2 · answered by Jackie 1 · 0⤊ 0⤋
heap是慢在配置記憶體
因為必須做一連串的檢查動作
使用時則和一般的stack變數無異
對足標、指標控制不好的程式師而言,用STL照樣會發生各種存取邊界的問題
2006-11-10 17:51:16 · answer #3 · answered by novus 6 · 0⤊ 0⤋
Heap比較慢?應是指載入執行檔image比較慢,因為檔案比較大; 執行時應是一模一樣的 (同樣都是記憶體位址存取)
有初值?永遠不要信賴compiler.
既然是講 array 了,不管C或C++都不會幫你檢查有沒有超出邊界. 用STL或MFC的class 都是靠class 的軟體碼幫你檢查.
2006-11-10 09:00:39 · answer #4 · answered by ? 4 · 0⤊ 0⤋