为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
元芳怎么了 2019-07-27 15:19:21
在内存中我的变量存储在C中?通过考虑将内存分为四个部分:数据,堆,堆栈和代码,全局变量,静态变量,常量数据类型,局部变量(在函数中定义和声明),变量(在main函数中),指针,并动态分配空间(使用malloc和calloc)存储在内存中?我认为他们将分配如下:全局变量------->数据静态变量------->数据常量数据类型----->代码局部变量(在函数中声明和定义)--------> stack在main函数-----> heap中声明和定义的变量指针(例如char *arr,int *arr)------->堆动态分配空间(使用malloc和calloc)-------->堆栈我只是从C的角度来指这些变量。如果我错了,请纠正我,因为我是C的新手。
查看完整描述

3 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

你有其中一些是正确的,但是写这些问题的人至少会欺骗你一个问题:

  • 全局变量------->数据(正确)

  • 静态变量------->数据(正确)

  • 常量数据类型----->代码和/或数据。当一个常量本身存储在数据段中时,考虑字符串文字,并且对它的引用将嵌入到代码中

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

  • main函数中声明和定义的变量-----> 堆也堆栈(老师试图欺骗你)

  • 指针(例如:char *arrint *arr)-------> 堆数据或堆栈,具体取决于上下文。C允许您声明全局或static指针,在这种情况下,指针本身将在数据段中结束。

  • 动态分配的空间(使用malloccallocrealloc)--------> 堆的堆

值得一提的是,“堆栈”被正式称为“自动存储类”。


查看完整回答
反对 回复 2019-07-27
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

纠正了错误的句子


constant data types ----->  code //wrong

局部常量变量----->栈


初始化全局常量变量----->数据段


未初始化的全局常量变量-----> bss


variables declared and defined in main function  ----->  heap //wrong

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


pointers(ex:char *arr,int *arr) ------->  heap //wrong


dynamically 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 stack

int *p2 = &x; //Now its pointing the memory of data segment

chat *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)-------->堆


查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 456 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信