为变量和激活记录保留空间
Reserving space for variables and activation record
只声明变量会在程序内存中为其保留空间吗?如果没有,那么请考虑以下代码片段:
void foo(int bar, int baz){
int a;
char b[4];
}
此代码一进入 foo 就会在堆栈中分配一个空间并创建如下激活记录:
| 巴兹 |
| 酒吧 |
|
保存的电脑 |
| 一 |
| 乙 |
那么,即使 a 和 b 只是声明而未定义,此激活记录如何为它们分配空间?
定义了
a
和b
,但未使用。由于程序无法判断它们是否被创建,因此编译器可以自由地忽略它们。
不一定,在某些优化条件下,编译器可能会选择丢弃未初始化变量占用的空间。但是,始终建议从代码中删除从未使用的变量。
在一般情况下,假设 32 位系统,您的编译器将在堆栈中腾出至少 4+4 字节的空间,以保存将来可能使用的变量数据。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 写入 std::vector 的保留空间会导致分段错误吗?
- 自定义容器在保留空间时不必要地创建新元素实例
- 为变量和激活记录保留空间
- 如何在堆栈上为非默认构造对象保留空间
- 从矢量中删除一对并为矢量对保留空间
- std::basic_string构造函数如何事先知道要保留多少空间
- 如何在不初始化每个元素的情况下为数组保留空间
- 如何在 Cython 包装器中保留复杂的 C++ 命名空间
- C++ : 使用 std::vector::reserve 减少保留空间
- 全局命名空间中的保留名称
- 在硬盘上为应用程序保留空间
- 为什么"std::string::reserve()"不保留我指定的确切空间量?
- 动态数组的Do实现在开始时保留空间,以备准备
- 为什么堆栈帧上保留的空间比x86中需要的空间多
- 为结构体保留内存空间时
- 如何为std::vector/std::string保留空间?
- 如果向量有足够的空间(通过保留创建),std::vector::insert()是否会使迭代器无效