加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

常量局部变量数组在内存中用于’C’程序

发布时间:2020-12-16 10:26:21 所属栏目:百科 来源:网络整理
导读:我正在使用GCC 4.8.1,它似乎没有将const变量本地存储在DATA段的main中.下面是3个这样的程序的代码和内存映射: 代码1: int main(void) { //char a[10]="HELLO"; //1 //const char a[10] = "HELLO"; //2 return 0; } MEMORY MAP FOR ABOVE: text data bss de
我正在使用GCC 4.8.1,它似乎没有将const变量本地存储在DATA段的main中.下面是3个这样的程序的代码和内存映射:

代码1:

int main(void) 
{ //char a[10]="HELLO"; //1 //const char a[10] = "HELLO"; //2 
return 0; 
} 

MEMORY MAP FOR ABOVE: 
text     data    bss     dec     hex    filename 
7264     1688 1040   9992    2708   a.exe

代码2:

int main(void)
{
    char a[10]="HELLO";
    //const char a[10] = "HELLO";
    return 0;
}

MEMORY MAP FOR 2: 
text     data    bss     dec     hex    filename 
7280     1688    1040    10008   2718 a.exe

代码3:

int main(void)
{
    //char a[10]="HELLO";
    const char a[10] = "HELLO";
    return 0;
}

MEMORY MAP FOR 3 :
 text    data    bss     dec     hex    filename 
7280     1688    1040    10008   2718   a.exe

我没有看到3个代码之间的数据段有任何差异.有人可以向我解释这个结果.

在期待中感谢!

解决方法

这是应该发生的事情:

代码1:任何地方都没有存储.

代码2:a存储在堆栈中.它不存储在.data中.

代码3a要么存储在堆栈中,要么存储在.rodata中,具体取决于它是否使用常量表达式进行初始化.优化器也可能决定将其存储在.text中(与代码一起).

I do not see any difference in data segment between 3 codes.

那是因为应该没有区别. .data用于具有静态存储持续时间的非常量变量,初始化为非零值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读