const和define的内存分配有关问题
const和define的内存分配问题7. const常量与define宏定义的区别存储方式不同define宏仅仅是展开,有多少地
const和define的内存分配问题
7. const常量与define宏定义的区别
存储方式不同
define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。
const常量会在内存中分配(可以是堆中也可以是栈中)。
这个说法是不是错的?
记得当初看教程的时候,是说define所定义的宏变量有多个拷贝,在预编译的时候使用多少次进行多少次替换。
例如:
C/C++ code#define MUM 3 //宏常量const int NUM=5; //此时并未将NUM 放入内存中int i=NUM; //此时为const 变量 NUM 分配内存,以后不再分配int I=MUM; //预编译期间进行宏替换,分配内存int j=NUM; //应用const变量,没有内存分配int J=MUM; //再进行宏替换,又一次分配内存
麻烦各位兄弟,帮忙看看是我理解错了,还是上面的说法有错误。
[解决办法]这里的分配内存是指:
const int maxn = 100;
可能存在一个变量,其名字是maxn,值为100,在语法上,是不可直接修改的。
而不分配内存是指,如果可能的话,在实际实现中,在出现maxn的地方都替换为100这个立即数。
(再进一步,在代码段中,100这个立即数是占内存的。)
[解决办法]还有一点区别:
const声明常量时带着类型,而define不带类型。
个别编译器中const可以进行调试,#define不可以进行调试
[解决办法]VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
[解决办法]现在的编译器优化,对于const int这样的变量,都不分配内存给变量,而是直接编译期间用立即数替换!如飞雪所说~!