我不确定我是否理解堆栈是如何工作的......
静态和动态数组之间是否有任何性能差异,不包括内存分配所需的时间?
char* data = (char*)malloc(100);
char data[100];
根据我的理解,堆栈只有几MB。为什么堆栈有限?为什么有堆栈和堆而不是一个存储内存的地方?
是否应动态分配所有数组?例如,在堆栈上有一个大小为1KB的数组,这是一个好主意吗?
答案 0 :(得分:2)
静态和动态数组之间是否有任何性能差异,不包括内存分配所需的时间?
性能差异在于初始化和阵列容量的任何变化。就元素访问而言,可以随机访问数组是关于最快的容器。
据我所知,堆栈只有几MB。为什么堆栈有限?为什么有堆栈和堆而不是一个存储内存的地方?
堆栈,动态和程序内存有限。计算机没有无限的内存大小。
用于堆栈或堆的内存量可以由构建环境改变,也可以由OS改变。如果程序需要更多内存,它可以向操作系统询问更多内容(但操作系统可能使用分页和虚拟内存)。
存在多种类型的内存区域,因为变量和数据具有不同的生命周期。它们也可能有不同的尺寸。
是否应动态分配所有数组?例如,在堆栈上有一个大小为1KB的数组,这是一个好主意吗?
不,不应动态分配不会改变大小且小的数组。较小的数组可以分配为局部变量;较大的可能想要位于filescope(自动变量)中。根据编译器或操作系统设置的限制,可能必须在动态内存或OS内存中分配大量数组。
此外,动态分配常量值数组(例如菜单文本或查找表)没有意义。这些可以放在只读存储区或与可执行文件相同的空间中。
您是否有理由限制阵列分配的灵活性? (请记住,从嵌入式到桌面式,有很多不同的应用程序。)