我不确定我是否理解堆栈的工作原理...
除了内存分配所需的时间之外,静态数组和动态数组之间是否存在性能差异?
char* data = (char*)malloc(100); char data[100];
据我了解,堆栈只有几 MB。为什么堆栈有限?为什么有栈和堆而不是一个地方来存储内存?
所有数组都应该动态分配吗?例如,在堆栈上放置一个大小为 1KB 的数组,这是一个好主意吗?
最佳答案
Is there any performance difference between static and dynamic arrays, excluding the time needed for memory allocation?
性能差异在于初始化和阵列容量的任何更改。就元素访问而言,可以随机访问的数组大约是最快的容器。
From what I understand stack is only a few MB. Why is the stack limited? Why have stack and heap and not a single place to store memory?
堆栈、动态和程序内存是有限的。计算机没有无限的内存大小。
专用于堆栈或堆的内存量可以通过构建环境甚至操作系统来更改。如果程序需要更多内存,它可以向操作系统请求更多内存(但操作系统可能使用分页和虚拟内存)。
由于变量和数据具有不同的生命周期,因此存在不止一种类型的内存区域。它们也可能有不同的尺寸。
Should all arrays be allocated dynamically? For example, having one array with size 1KB on stack, is it a good idea?
不,分配大小不变且较小的数组不应动态分配。较小的数组可以分配为局部变量;而较大的可能希望位于文件范围(自动变量)中。根据编译器或操作系统设置的限制,可能必须在动态内存或操作系统内存中分配大型数组。
此外,动态分配常量值数组(例如菜单文本或查找表)是没有意义的。这些可以放置在只读内存区域或与可执行文件相同的空间中。
是否有理由需要限制数组分配的灵活性? (请记住,有很多不同的应用程序,从嵌入式到桌面。)
关于c++ - 堆栈溢出和静态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22024821/