新手上路
- 积分
- 38
- 金钱
- 38
- 注册时间
- 2015-10-27
- 在线时间
- 4 小时
|
5金钱
@正点原子 之前在一本书上看到说,虽然define在预编译阶段不占用内存,但在编译阶段会占用内存。如************************************************
#define X 123.45
"define定义的不占内存" 指 X 不占内存.
define定义的宏,是预编译时的字符串替代。#define X 123.45 的作用是把程序中的 X 用 123.45 替代 再编译。 例如程序中 有:
y = X + 6.0;z = X / 7.0;
预编译时字符串替代为:
y = 123.45 + 6.0;
z = 123.45 / 7.0;
替代后 再编译, 仍然要 为 123.45 分配单元,放在常数区。
所以 X 不占内存,123.45 要占 内存。*******************************************************************************还有 #define PI 3.14159 //常量宏 const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ......
double i=Pi; //此时为Pi分配内存,以后不再分配!
double I=PI; //编译期间进行宏替换,分配内存
double j=Pi; //没有内存分配
double J=PI; //再进行宏替换,又一次分配内存!
那么问题来了,为什么STM32用了那么多define,如
#define CR_PG_Set ((uint32_t)0x00000001)
#define CR_PG_Reset ((uint32_t)0x00001FFE)
#define CR_PER_Set ((uint32_t)0x00000002)
#define CR_PER_Reset ((uint32_t)0x00001FFD)
这样不是很浪费内存吗,为什么不用const?
新手求解。谢谢!!
|
最佳答案
查看完整内容[请看2#楼]
常数肯定要存储在rom区的某个位置的。 所以define定义的值,要占用rom。 另外,这些实际上不会占用很多,必须要用到的才会被编译,没用到的,直接就被编译器忽略了。。。
|