C程序中变量的段?

C程序中变量的段?,c,memory,C,Memory,每个表达式存储在内存中的什么位置? 常量变量存储在哪里 #include<stdio.h> int a = 0; // initialized data segment char arr[10] = "hello"; // initialized data segment const int k = -1; // int* gptr = &a; // int main() {

每个表达式存储在内存中的什么位置? 常量变量存储在哪里

#include<stdio.h>

int a = 0;                   // initialized data segment
char arr[10] = "hello";      // initialized data segment
const int k = -1;            //
int* gptr = &a;              //

int main()
{
    const int m = 31;        //
    int n;                   //
    int* ptr;                //
    ptr = malloc(1024);      // heap segment

    char* ptr2 = &arr;       //

    for(n = 0; n<1024; ++n)  //
        printf("%d ", n);    //
}
#包括
int a=0;//初始化数据段
char arr[10]=“你好”//初始化数据段
常数int k=-1//
int*gptr=&a//
int main()
{
常数int m=31//
int n//
int*ptr//
ptr=malloc(1024);//堆段
字符*ptr2=&arr//

对于(n=0;nGCC会将常量存储在文本部分。

只有操作系统内核知道它们存储在哪里。或者您可能会选择.data和.rodata之类的可执行文件段?或者您的意思是堆中的谁和堆栈中的谁?我们通常会说。实际存储内容的位置至少在某种程度上是特定于实现的。在C,
k中
只是一个受限全局变量(不能合法修改)。它可能存储在只读段中,但更可能不是;它可能与其他全局变量位于同一段中。k不会被编译器优化掉吗?@MarioTheSpoon是的,
k
可能被优化掉,因为它不在这里的代码中使用,但这取决于编译器和编译标志。