读书人

静态内存区?解决办法

发布时间: 2012-03-09 21:42:54 作者: rapoo

静态内存区?
char a[] = “hello”;
a[0] = ‘X’;
char *p = “world”; // 注意p 指向常量字符串
p[0] = ‘X’;/*错误*/
为什么指针p 指向位于静态存储区?
另外哪些变量会自动分配在静态存储区?


[解决办法]
所有的常量都在静态区,hello在,world也在,常量字符串都在那
一些没有办法化成立即数的数字也会放在那,比如int x[5] = {1,2,3,4,5};这5个数字也是在那里。

char a[] = “hello”;在栈上生成一个数组,并拷贝静态区的hello字符常量进去
char *p = “world”; 指向静态区常量字符串(静态区常量不可以修改)

当然不同的OS的执行文件结构会不一样,
另外,看看反汇编,就一切问题都清楚啦

读书人网 >C语言

热点推荐