C 有關記憶體的小謎題
1.破壞計數:
int main()
{
int i;
int array[4];
for(i=0;i<=4;i++){
array[i] = 0;
}
return 0;
}
堆疊中:
- | sava pc
- | i (即array 4)
- | array 3
- | array 2
- | array 1
- | array 0
當i到達4時,array[4]=0會將i置換為0,從而無限迭代
2.重置返回地址:
int foo()
{
int array[4];
int i;
for(i=0;i<=4;i++){
array[i] -= 4;
}
return 0;
}
堆疊中:
| save pc (即array + 4)
| array + 3
| array + 2
| array + 1
| array + 0
| i
每次迭代的array + 4,即save pc處,將返回地址減4,又會再次呼叫此函式,從而無限迭代
3.重用堆疊
int main()
{
newIntArray();
printArray();
return 0;
}
void newIntArray()
{
int array(100);
for(int i = 0; i < 100; i++)
array[i] = i;
}
void printArray()
{
int array[100];
for(int i = 0; i < 100; i++)
print("%d,", array[i]);
}
輸出結果:1,2,3,4,5,6,7, ...........100,
堆疊中:
| save pc
| array 99
| array 98
| array 97
| ..........
| array 1
| array 0
即newIntArray()在堆疊中建立資料後,printArray()又一次重新使用同一堆疊
相關文章
- Java記憶體模型FAQ(五)舊的記憶體模型有什麼問題?Java記憶體模型
- project中的堆疊記憶體,記憶體地址引用,gc相關問題Project記憶體GC
- 關於PHP記憶體洩漏的問題PHP記憶體
- 小程式白屏問題和記憶體研究記憶體
- C++結構體內幕揭秘:sizeof之謎與記憶體佈局探秘C++結構體記憶體
- iOS 記憶體管理相關面試題iOS記憶體面試題
- C++記憶體管理:簡易記憶體池的實現C++記憶體
- 【C/C++】4.C++的記憶體管理C++記憶體
- windows10怎麼關閉虛擬記憶體_win10關閉c盤虛擬記憶體的方法Windows記憶體Win10
- C結構體中資料的記憶體對齊問題結構體記憶體
- 小計:引用型別記憶體分配問題型別記憶體
- 小題大做 | Handler記憶體洩露全面分析記憶體洩露
- C 語言結構體記憶體佈局問題結構體記憶體
- C語言結構體記憶體佈局問題C語言結構體記憶體
- C中的記憶體分配模型記憶體模型
- C語言的記憶體分配C語言記憶體
- 關於redis記憶體分析,記憶體優化Redis記憶體優化
- C++記憶體管理C++記憶體
- [20191220]關於共享記憶體段相關問題.txt記憶體
- [效能]【JVM】關於JVM記憶體的N個問題JVM記憶體
- Chrome 再次最佳化記憶體佔用問題,新增記憶體釋放開關Chrome記憶體
- 小程式記憶體問題–圖片懶載入記憶體
- 從C++看C#託管記憶體與非託管記憶體C++C#記憶體
- c程式的記憶體佈局圖C程式記憶體
- C# 記憶體的理解 通俗說C#記憶體
- JavaScript變數,資料和記憶體的相關問題JavaScript變數記憶體
- 關於dataWithContentsOfFile 讀取大檔案的記憶體問題記憶體
- C# 記憶體對齊C#記憶體
- C++記憶體掃描C++記憶體
- C++記憶體管理剖析C++記憶體
- C程式記憶體佈局C程式記憶體
- C語言-記憶體分配C語言記憶體
- Objective-C記憶體管理Object記憶體
- Objective-C 記憶體管理Object記憶體
- 排查Java的記憶體問題Java記憶體
- c語言強制記憶體轉化引發的問題C語言記憶體
- 請描述C/C++程式的記憶體分割槽?C++記憶體
- 【C】 42_記憶體操作經典問題分析 二記憶體
- 【C】 41_記憶體操作經典問題分析 一記憶體