c++和静态数组
c++ and static arrays
我不确定我是否理解堆栈是如何工作的。。。
-
除了内存分配所需的时间外,静态数组和动态数组之间是否存在性能差异?
char* data = (char*)malloc(100); char data[100];
-
据我所知,堆栈只有几MB。为什么堆栈受到限制?为什么有堆栈和堆而没有一个地方存储内存?
-
是否应该动态分配所有阵列?例如,在堆栈上有一个大小为1KB的阵列,这是个好主意吗?
除了内存分配所需的时间外,静态数组和动态数组之间是否存在性能差异?
性能差异在于初始化和阵列容量的任何更改。可以随机访问的数组是元素访问速度最快的容器。
据我所知,堆栈只有几MB。为什么堆栈受到限制?为什么有堆栈和堆而没有一个地方存储内存?
堆栈、动态和程序内存有限。计算机没有无限大的内存。
用于堆栈或堆的内存量可以由构建环境更改,也可能由操作系统更改。如果程序需要更多内存,它可以向操作系统请求更多内存(但操作系统可能会使用分页和虚拟内存)。
存在不止一种类型的存储器区域,因为变量和数据具有不同的寿命。它们也可能有不同的尺寸。
是否应该动态分配所有数组?例如,在堆栈上有一个大小为1KB的阵列,这是个好主意吗?
否,不应动态分配大小不变且较小的数组。较小的数组可以作为局部变量进行分配;而较大的可能希望位于文件范围(自动变量)中。根据编译器或操作系统设置的限制,可能需要在动态内存或操作系统内存中分配巨大的数组。
此外,动态分配常数值数组(如菜单文本或查找表)也没有意义。这些文件可以放在只读存储器区域中,也可以与可执行文件放在同一空间中。
您是否需要限制数组分配的灵活性?(记住,从嵌入式到桌面,有很多不同的应用程序。)
相关文章:
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 静态数组的自由动态数组
- 如何在C++函数中声明静态 2D 数组?
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 基于字节数组生成静态范围整数值
- 如何在C++中删除静态数组?
- 为什么 &a 和 c++ 中的静态数组相同?
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 将在堆栈上声明的元素添加到静态数组
- const_cast静态数组以添加恒常性
- C++访问静态 constexpr 数组
- 初始化类中的静态 const 数组 - C++
- 将静态字符数组中的字符分配给动态分配的字符数组 - 访问冲突
- 动态分配的数组和静态数组之间的区别
- 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以使用 constexpr 函数声明一个静态数组吗?
- 如何在静态函数中使用成员函数数组
- 具有大的2d数组:静态int与int