在内存中我的变量存储在C中?

在内存中我的变量存储在C中?

通过考虑将内存分为四个部分:数据,堆,堆栈和代码,全局变量,静态变量,常量数据类型,局部变量(在函数中定义和声明),变量(在main函数中),指针,并动态分配空间(使用malloc和calloc)存储在内存中?

我认为他们将分配如下:

  • 全局变量------->数据

  • 静态变量------->数据

  • 常量数据类型----->代码

  • 局部变量(在函数中声明和定义)--------> stack

  • 在main函数-----> heap中声明和定义的变量

  • 指针(例如char *arrint *arr)------->堆

  • 动态分配空间(使用malloc和calloc)-------->堆栈

我只是从C的角度来指这些变量。

如果我错了,请纠正我,因为我是C的新手。


元芳怎么了
浏览 458回答 3
3回答

茅侃侃

你有其中一些是正确的,但是写这些问题的人至少会欺骗你一个问题:全局变量------->数据(正确)静态变量------->数据(正确)常量数据类型----->代码和/或数据。当一个常量本身存储在数据段中时,考虑字符串文字,并且对它的引用将嵌入到代码中局部变量(在函数中声明和定义)--------> stack(正确)main函数中声明和定义的变量-----> 堆也堆栈(老师试图欺骗你)指针(例如:char *arr,int *arr)-------> 堆数据或堆栈,具体取决于上下文。C允许您声明全局或static指针,在这种情况下,指针本身将在数据段中结束。动态分配的空间(使用malloc,calloc,realloc)--------> 堆的堆值得一提的是,“堆栈”被正式称为“自动存储类”。

侃侃尔雅

纠正了错误的句子constant data types ----->  code //wrong局部常量变量----->栈初始化全局常量变量----->数据段未初始化的全局常量变量-----> bssvariables declared and defined in main function  ----->  heap //wrong在main函数-----> stack中声明和定义的变量pointers(ex:char *arr,int *arr) ------->  heap //wrongdynamically allocated space(using malloc,calloc) --------> stack //wrong指针(例如:char * arr,int * arr)------->指针变量的大小将在堆栈中。考虑你动态分配n个字节的内存(使用malloc或calloc),然后使指针变量指向它。现在,n内存的字节数在堆中,指针变量需要4个字节(如果是64位机器8个字节),它将在堆栈中存储n内存块字节的起始指针。注意:指针变量可以指向任何段的内存。int x = 10;void func(){int a = 0;int *p = &a: //Now its pointing the memory of stackint *p2 = &x; //Now its pointing the memory of data segmentchat *name = "ashok" //Now its pointing the constant string literal                      //which is actually present in text segment.char *name2 = malloc(10); //Now its pointing memory in heap...}动态分配空间(使用malloc,calloc)-------->堆
打开App,查看更多内容
随时随地看视频慕课网APP