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()又一次重新使用同一堆疊
相關文章
- 有關記憶體的思考題記憶體
- 【OpenCV】有關記憶體釋放的一些問題OpenCV記憶體
- 關於C中記憶體操作記憶體
- 記憶體洩漏的有關知識記憶體
- 關於java吃記憶體的問題Java記憶體
- Java記憶體模型FAQ(五)舊的記憶體模型有什麼問題?Java記憶體模型
- C++結構體內幕揭秘:sizeof之謎與記憶體佈局探秘C++結構體記憶體
- project中的堆疊記憶體,記憶體地址引用,gc相關問題Project記憶體GC
- C/C++記憶體釋放應注意的問題C++記憶體
- Linux C面試題(記憶體管理)Linux面試題記憶體
- C語言的謎題C語言
- 小程式白屏問題和記憶體研究記憶體
- iOS 記憶體管理相關面試題iOS記憶體面試題
- 關於PHP記憶體洩漏的問題PHP記憶體
- C結構體中資料的記憶體對齊問題結構體記憶體
- 小計:引用型別記憶體分配問題型別記憶體
- 小題大做 | Handler記憶體洩露全面分析記憶體洩露
- 解決Windows下棧記憶體過小的問題Windows記憶體
- 關於SQL Server的記憶體佔用問題SQLServer記憶體
- [IOS]關於Obj-C記憶體管理的規則iOSOBJ記憶體
- C++記憶體管理:簡易記憶體池的實現C++記憶體
- windows10怎麼關閉虛擬記憶體_win10關閉c盤虛擬記憶體的方法Windows記憶體Win10
- 關於c語言記憶體分配,malloc,free,和段錯誤,記憶體洩露C語言記憶體洩露
- 關於redis記憶體分析,記憶體優化Redis記憶體優化
- 【c++】vector.clear()的記憶體洩露問題C++記憶體洩露
- 【C/C++】4.C++的記憶體管理C++記憶體
- C 語言結構體記憶體佈局問題結構體記憶體
- C語言結構體記憶體佈局問題C語言結構體記憶體
- 記憶體管理中關於記憶體每次增長的大小記憶體
- 解謎遊戲謎題設計研究(二):機關類謎題設計遊戲
- C語言的記憶體分配C語言記憶體
- 控制C++的記憶體分配C++記憶體
- C中的記憶體分配模型記憶體模型
- 小程式記憶體問題–圖片懶載入記憶體
- C語言-記憶體管理之一[記憶體分配]C語言記憶體
- C語言-記憶體管理之二[記憶體指令]C語言記憶體
- [C++]記憶體分配C++記憶體
- C# 記憶體管理C#記憶體