c++和静态数组

c++ and static arrays

本文关键字:数组 静态 c++      更新时间:2023-10-16

我不确定我是否理解堆栈是如何工作的。。。

  1. 除了内存分配所需的时间外,静态数组和动态数组之间是否存在性能差异?

    char* data = (char*)malloc(100);
    char data[100];
    
  2. 据我所知,堆栈只有几MB。为什么堆栈受到限制?为什么有堆栈和堆而没有一个地方存储内存?

  3. 是否应该动态分配所有阵列?例如,在堆栈上有一个大小为1KB的阵列,这是个好主意吗?

除了内存分配所需的时间外,静态数组和动态数组之间是否存在性能差异?

性能差异在于初始化和阵列容量的任何更改。可以随机访问的数组是元素访问速度最快的容器。

据我所知,堆栈只有几MB。为什么堆栈受到限制?为什么有堆栈和堆而没有一个地方存储内存?

堆栈、动态和程序内存有限。计算机没有无限大的内存。

用于堆栈或堆的内存量可以由构建环境更改,也可能由操作系统更改。如果程序需要更多内存,它可以向操作系统请求更多内存(但操作系统可能会使用分页和虚拟内存)。

存在不止一种类型的存储器区域,因为变量和数据具有不同的寿命。它们也可能有不同的尺寸。

是否应该动态分配所有数组?例如,在堆栈上有一个大小为1KB的阵列,这是个好主意吗?

否,不应动态分配大小不变且较小的数组。较小的数组可以作为局部变量进行分配;而较大的可能希望位于文件范围(自动变量)中。根据编译器或操作系统设置的限制,可能需要在动态内存或操作系统内存中分配巨大的数组。

此外,动态分配常数值数组(如菜单文本或查找表)也没有意义。这些文件可以放在只读存储器区域中,也可以与可执行文件放在同一空间中。

您是否需要限制数组分配的灵活性?(记住,从嵌入式到桌面,有很多不同的应用程序。)