内存管理的问题,请进来发言!
char *str = "abc";应该等同于const char str[4] = "abc", 对不?
str变量是在栈上分配吗?"abc"呢?加了const后在哪里分配内存?
最好能扩充讨论范围~~~
问题点数:100、回复次数:11Top
1 楼kingzai(stevenzhu)回复于 2001-11-12 10:38:53 得分 0
局部变量和函数参数一般在栈上分配内存,而全局变量一般要在自由内存区,通常的说法是堆中分配内存,这是由他们的特性决定的。
第一个问题应该不同,char*str="abc";应该在前面加上const把
Top
2 楼kenwhale(屠夫)回复于 2001-11-12 10:42:49 得分 20
第一问,对,char *str="abc"声明一个常量。
后面的问题:char *str="abc";声明了一个"abc"字符串常量,而变量str指向保存该常量的内存区。该内存区会在整个进程期间都有效,而变量str只在他自己的作用空间内有效。Top
3 楼jiangping_zhu(娜可露露之风之刃)回复于 2001-11-12 10:49:59 得分 30
第一个"abc"放在只读数据段里,第二个放在堆栈中,如果加上const也是也是放在堆栈中。Top
4 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-11-12 10:55:04 得分 0
我是同意char *str = "abc";等同于const char str[4] = "abc"。
我想讨论的是:
------------------------
char *str1;
1. str1是在栈中的吧?
---------------------
char str2[4] = "abc";
2. str2在栈中吧? "abc"呢?
----------------------------
const char str3[4] = "123"
3. str3和"123"呢?Top
5 楼kingzai(stevenzhu)回复于 2001-11-12 11:08:05 得分 20
我同意jiangping_zhu的,如果是全局指针应该放在堆中才对。Top
6 楼jiangping_zhu(娜可露露之风之刃)回复于 2001-11-12 12:46:55 得分 20
1,2,3中的str都是放在堆栈中Top
7 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-11-12 12:57:12 得分 0
内容呢?Top
8 楼jiangping_zhu(娜可露露之风之刃)回复于 2001-11-12 13:00:26 得分 0
放在只读数据段Top
9 楼jiangping_zhu(娜可露露之风之刃)回复于 2001-11-12 13:01:56 得分 0
另外,你这两个声明是初始化数组,它回拷贝到数组中,也就是拷贝到堆栈中。Top
10 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-11-13 10:12:40 得分 0
谁能系统地总结一下,包括指针,数组的指针变量以及指针变量所指向的内容是怎么存储的
还有带const修饰的。Top
11 楼hgw111(hg)回复于 2001-11-13 10:15:54 得分 10
重看一下c++的书吧,其中都有Top




