所有在我的课本秀缓冲阵列的例子问题被存储在堆栈,当返回地址改写这个导致问题。但是,缓冲区总是处于堆栈状态?我认为一个数组将被写入内存中的其他地方,而不是堆栈。缓冲区字符数组是否始终存储在堆栈中?
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堆栈交换。一些更多的信息是有用的,比如你使用的是什么编程语言,因为不同的语言甚至不同的编译器可能会以不同的方式处理数组中变量的存储。 –