读书人

常量字符串的内存分配有关问题

发布时间: 2013-07-08 14:13:00 作者: rapoo

常量字符串的内存分配问题?
都知道char* a = "123"这个"123"是分配在常量区的。
我想问,常量区基本跟静态区一样,是一直占着内存的?如果有大量的这种常量,是不是用char a[] = "123"更好一些?
还有下面几种情况,是怎么样的呢?


//假如有函数fun(char*)
fun("234");//这个"234"也是分配在常量区的?



const char* a = "123";
const char* b = "234";
//这个123,234分别要占两份常量区的空间?

[解决办法]
引用:
Quote: 引用:

fun("234");//"234\0"是字符串常量,分配在常量区


const char* a = "123";
const char* b = "234";
//怎么理解为要分别占用两份常量区内存呢?只有一份
//这里a和b分配在栈上,他们分别指向常量区的"123\0"和"234\0"


我的意思是,“123”占一份,“234”占一份?
是各占一份
看看汇编:
int main()
{
const char* a = "123";
const char* b = "234";
return 0;
}

.file"tc2.cpp"
.def___main;.scl2;.type32;.endef
.section .rdata,"dr"
LC0:
.ascii "123\0"
LC1:
.ascii "234\0"
.text
.align 2
.globl _main
.def_main;.scl2;.type32;.endef
_main:
pushl%ebp
movl%esp, %ebp
subl$24, %esp
andl$-16, %esp
movl$0, %eax
addl$15, %eax
addl$15, %eax
shrl$4, %eax
sall$4, %eax
movl%eax, -12(%ebp)
movl-12(%ebp), %eax
call__alloca
call___main
movl$LC0, -4(%ebp)
movl$LC1, -8(%ebp)
movl$0, %eax
leave
ret

[解决办法]
引用:
好的,谢谢,这是想知道的。我还想问问,如果程序中存在大量这种常量字符串,而且都不一样,岂不是要占用很多多余的空间?


大量字符串最好使用按需要加载数据,比如资源或数据文件,写在程序里的应该是比较重要的那部分。

读书人网 >C语言

热点推荐