内存中的位置是我的变量存储在C中?
通过考虑内存分为四个部分:数据,堆,堆栈和代码,全局变量,静态变量,常量数据类型,局部变量(在函数中定义和声明),变量(在主函数中),指针,并动态分配空间(使用malloc和calloc)获取存储在内存中?
我认为他们将被分配如下:
char *arr , int *arr )------->堆 我只是从C的角度来看这些变量。
如果我错了,请纠正我,因为我是新手C.
你有这些权利,但是谁写这些问题至少欺骗了你一个问题:
main函数中声明和定义的变量----->堆也堆栈(老师试图欺骗你) char *arr , int *arr )------->堆数据或堆栈,取决于上下文。 C可以让你声明一个全局或static指针,在这种情况下,指针本身最终会在数据段中出现。 malloc , calloc , realloc )-------->栈堆 值得一提的是,“堆栈”被正式称为“自动存储类”。
对于那些有兴趣了解这些内存段的未来访问者,我写了关于C中5个内存段的重要观点:
有些人抬起头来:
5个内存段C:
1.代码段
printf("Hello, world")字符串“Hello,world”会在代码/文本段中创建。 您可以在Linux操作系统中使用size命令验证这一点。 数据段
数据段分为以下两部分,通常位于堆区之下,或者位于堆栈之上的某些实现中,但数据段永远不会位于堆栈和堆栈区之间。
2.未初始化的数据段
int globalVar; 或静态局部变量static int localStatic; 将被存储在未初始化的数据段中。 0或NULL那么它仍然会转到未初始化的数据段或bss。 3.初始化的数据段
int globalVar = 1; 或静态局部变量static int localStatic = 1; 将存储在已初始化的数据段中。 4.堆栈段
5.堆段
malloc , calloc或realloc方法完成。 int* prt = malloc(sizeof(int) * 2)将在堆中分配八个字节,并且该位置的内存地址将被返回并存储在ptr变量中。 根据声明/使用的方式, ptr变量将位于堆栈或数据段中。 更正了你错误的句子
constant data types -----> code //wrong
局部常量变量----->堆栈
初始化全局常量变量----->数据段
未初始化的全局常量变量-----> bss
variables declared and defined in main function -----> heap //wrong
在主函数----->堆栈中声明和定义的变量
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)-------->堆
链接地址: http://www.djcxy.com/p/28341.html