所有在我的課本秀緩衝陣列的例子問題被存儲在堆棧,當返回地址改寫這個導致問題。但是,緩衝區總是處於堆棧狀態?我認爲一個數組將被寫入內存中的其他地方,而不是堆棧。緩衝區字符數組是否始終存儲在堆棧中?
0
A
回答
0
聲明爲常量大小(請參見下面的示例)或立即初始化的局部變量緩衝區將存儲在堆棧中。
char x[20];
或char x[] = "this buffer";
即使它們隨後被傳遞到可變將保持存儲在棧上的函數。距執行功能更遠。
如果你一個緩衝,然後它會被保存在堆內存而不是在棧上分配內存。
char *x = (char *) malloc(LENGTH_OF_BUFFER);
這是當heap spraying可開採成爲必要。你看到堆棧中大多數緩衝區溢出的原因是因爲它是開始理解開發概念的最簡單方法。
1
緩衝器陣列通常存儲在棧上。但是,將它們存儲在堆或固定的內存位置是非常有可能的 - 這就是假設你正在處理區分堆棧和堆的語言(和體系結構)。
1
這主要取決於編譯器,你的緩衝聲明和函數的調用方式。
在C語言中,一般來說,局部變量被分配到堆棧以及爲函數調用提供的一些參數(在cdecl調用約定*中。其他調用約定可能通過寄存器或甚至通過透明堆分配在某些情況下)。
一些語言和編譯器將以不同的方式分配這些。例如,在Delphi中,你是否聲明瞭一個類型爲「string」的局部變量,實際的數據將被存儲在堆上,只有一個指針被分配給堆棧。
最後,程序員總是可以決定在堆(或全局內存)上顯式分配緩衝區。
相關問題
- 1. 堆棧緩衝區溢出
- 2. 當字符存儲在緩衝區
- 3. 堆棧緩衝區溢出是否會導致堆損壞?
- 4. 緩衝區溢出(VS)緩衝區溢出(VS)堆棧溢出
- 5. 字符堆棧,字符串堆棧,整數堆棧,整數數組堆棧等
- 6. 當堆棧和堆棧內存發生衝突時,程序是否終止?
- 7. 查找堆棧緩衝區溢出
- 8. 堆棧方向和緩衝區溢出
- 9. 堆棧損壞使用緩衝區
- 10. 利用堆棧緩衝區溢出
- 11. 緩衝區溢出堆棧衛士
- 12. 堆棧及緩衝區溢出數組c語言
- 13. 初始化字符緩衝區在C++
- 14. 複製零終止原始字節緩衝區到字符串
- 15. 循環字符數組緩衝區 - c
- 16. Java緩衝區到字符串數組
- 17. C#字符串數組緩衝區
- 18. fread在緩衝區中存儲隨機字符
- 19. 緩衝區溢出在0x7E上添加字節到堆棧
- 20. 數組如何存儲在堆棧上?
- 21. 棧vs緩衝區
- 22. 如何初始化數組並填充字符從緩衝區?
- 23. 在緩衝區中存儲內容
- 24. 堆棧溢出 - 緩衝區的內存位置
- 25. 什麼是存儲緩衝區?
- 26. 是否建議在數據庫中存儲堆棧跟蹤?
- 27. 在協議緩衝區消息中存儲二進制數據緩衝區
- 28. kmalloc中的緩衝區是否也是DMA安全緩衝區?
- 29. 初始化的java數組是否進入堆棧或堆?
- 30. IIO設備緩衝區始終爲空
歡迎來到IS堆棧交換。一些更多的信息是有用的,比如你使用的是什麼編程語言,因爲不同的語言甚至不同的編譯器可能會以不同的方式處理數組中變量的存儲。 –