#定义指令内存存储
#define directive memory storage
当我声明像
#define VAR 1
1的值存储在哪里?我不认为在堆中,也不是堆栈。会在。bss部分吗?
没有存储在任何地方。它只在编译的预处理阶段使用。您可以将其看作是在代码中用1
替换VAR
的文本。在此之后,宏本身将不再存在于您的程序中。
考虑下面的例子:
#define VAR 1
int x = VAR;
这只是预处理成:
int x = 1;
然后是这个代码被编译为c++。所以宏VAR
不占任何空间。然而,x
定义的对象很可能做到这一点。
#define
纯粹是一个预处理工件。如果不使用宏,它的值甚至不会到达编译器。如果使用了,那么问题的答案将取决于如何使用。
它存储在您实际使用VAR
的任何地方,因为您在这里定义的只是预处理器的文本替换规则。
#define VAR 1
int x = VAR;
在编译源代码之前,预处理器会将其缩减为:
int x = 1;
本例中,1
的值存储在x
中。VAR
符号在编译之前被有效地擦除。
只有#define VAR 1
。所以只有……定义了。它不会引起任何内存分配,它只被预处理器用来替换所有出现的定义值为1的VAR
。只是一个文本概念。
编译器会在生成目标代码时将程序中使用的所有# define变量替换为值。
如果您正在使用gcc,您可以使用选项-E。使用此选项,您可以看到源代码的输出,其中执行了#define替换(还有#includes,等等)
gcc -E whatever_file.c
在调试复杂的宏时非常有用
相关文章:
- 将字符串存储在c++中的稳定内存中
- 类型总是使用其大小存储在内存中吗
- 使用无符号字符数组有效存储内存
- 具有内存顺序的原子负载存储
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 可用存储空间会消耗更多剩余内存吗?
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 将数据存储在内存中以供以后访问
- 英特尔将指令存储在重叠的内存区域
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- std::set 是否将对象连续存储在内存中?
- 原子加载和存储与内存顺序放宽
- 我应该以字符形式存储数字以节省内存吗?
- std::unordered_set 中的元素如何存储在C++内存中?
- 是否可以更早地销毁对象,使其存储内存被后续对象重用
- SSE加载/存储内存事务
- 在类- c++中存储内存内容