2013-01-12 218 views
1

可能重复:
What is the difference between char a[] = “string”; and char *p = “string”;static const char * const和static const char []之间有什么区别?

将数组版本分配阵列中的存储器,所以一个100字节的字符串将静态阵列上使用的恒定截面和100 100个字节,或它只会使用100个字节的总数?还有指针版本,除了字符串的100个字节外,它还会为指针分配字的大小,还是将指针优化为常量段的地址?

+0

除了上面标记的副本的含义之外,'static'控制着链接和存储。 –

+0

这不是同一个问题,因为静态修饰符会导致内存分配的优化。 – Spidey

回答

1

如果你使用一台普通电脑,具有.rodata部分:

#include <stdio.h> 

static const char *s = /* string of 100 characters */; 

int main(void) 
{ 
    puts(s); 
    return 0; 
} 

它分配在.rodata部分100 + sizeof(char *)字节。

#include <stdio.h> 

static const char s[100] = /* string of 100 characters */; 

int main(void) 
{ 
    puts(s); 
    return 0; 
} 

它分配在.rodata100字节。