0
点赞
收藏
分享

微信扫一扫

OneFlow深度学习框架介绍

梦为马 04-09 13:00 阅读 3

1.大体有哪些区域?

栈区:局部变量,函数的参数

堆区:动态分配的内存

代码区:被编译后的程序代码

静态区:静态变量,全局变量

常量区:数字常量,字符串常量

2.如何区分变量是那个区域?

3.你以为你看完上面的就掌握了吗?不,请你看看下面的代码和题目,再来说你掌握了。

int globalvar = 1;
int staticGlobalVar = 1;
int main()
{
	static int staticVar = 1;
	int localVar = 1;
	
	int num1[10] = { 1,2,3,4 };
	char char2[] = "abcd";
	const char* pChar3 = "abcd";
	int* ptr1 = (int*)malloc(sizeof(int) * 4);
	int* ptr2 = (int*)calloc(4, sizeof(int));
	int* ptr3 = (int*)realloc(ptr2, sizeof(int));
	free(ptr1);
	free(ptr2);
	free(ptr3);
	return 0;
}

(1)选择题:

下面的变量在内存的哪个区域?

选项:A、栈区        B、堆区     C、静态区      D、常量区

①   globalvar___       staticGloalVar___     staticVar___         

②   localVar___     num1___

③   char2___       *char2___                           

④   pChar3___       *pChar3___

⑤   ptr1___          *ptr1___       

(2)答案:①  C   C   C   

           ②  A    A

           ③  A    A 

           ④  A    D

           ⑤  A    B

(3)解析:

①静态变量和全局变量 存放在 静态区

②局部变量 存放在 栈区。num1也是一个局部的变量

③char2是一个局部变量

  *char2解引用表示它指向的那一块数组的首元素,而数组的首元素存储在栈区中,这里你们一定有疑惑,为什么字符串存储在栈区。其实不然,这里表示的char类型的数组会在栈区开辟5个字节的空间,然后把在常量区的字符串“abcd\0”拷贝到数组中。

所以*char指向的数组是在栈区。

④pChar3也是一个局部变量,在栈区。

  *pChar3指向的是常量区的字符串“abcd\0”,所以*pChar3表示字符串的首元素a,a是存放在常量    区的。

⑤ptr1也是一个局部变量,存放在栈区。它指向的是一块堆区的内存块。

  *ptr1,是对ptr1指针解引用,就是堆区的那一块空间。

这么说你们肯定还是发蒙,那我画个图来带你们理解!、

                   

举报

相关推荐

0 条评论