C++内存问题(c内存问题)

C++内存问题(c内存问题)-图1

目录

内存四区

栈区

堆区

静态区:

常量区:

例题:

 题解

选择题

填空题


内存四区

在C/C++中内存分为4个区:栈区,堆区,静态区(数据段), 常量区(代码段)

栈区

栈的生长空间向下,地址从高地址到低地址,所有的变量,函数调用的开销,都在栈区,该区的内存由系统进行管理,不受程序员控制。

堆区

堆的生长空间向上,地址从低地址到高地址,所有动态开辟的空间都在栈区,此处的内存需要程序员手动进行开辟和释放,内存泄漏就发生在栈区。

静态区:

静态区也叫数据段,存放静态变量和全局变量,定义在全局的变量和用static修饰的变量放在这个区域。

常量区:

常量区也叫做代码段,存放只读数据,如const修饰的变量,常量,程序执行依赖的代码,都放在这个区域,试图修改常量区的数据会被系统警告报错,甚至导致程序崩溃。

例题:
int globalVar = 1;

static int staticGlobalVar = 1;

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

 1.选择题

选项: A.栈 B.堆 C.数据段(静态区) D.代码段(常量区)

  globalVar在哪里?____  staticGlobalVar在哪里?____

  staticVar在哪里?____  localVar在哪里?____

  num1 在哪里?____

  

  char2在哪里?____   *char2在哪里?___

  pChar3在哪里?____   *pChar3在哪里?____

  ptr1在哪里?____    *ptr1在哪里?____

2.填空题

  sizeof(num1) = ____;  

  sizeof(char2) = ____;   strlen(char2) = ____;

  sizeof(pChar3) = ____;   strlen(pChar3) = ____;

  sizeof(ptr1) = ____;

 题解

选择题

globalVal 对于 globalVal 我们可以看到它定义在函数体的外面,所以他具有全局属性,同时其没有const修饰,说明他是个变量,所以他在数据段,选C.

staticGlobalVal 与globalVal类似,只是加上了static修饰,他没有常属性,所以仍然在数据段,选C

staticVar 他是在函数内部的,有static修饰,而static修饰的量在定义时便已经初始化好了(因为调试汇编代码,可以看到没有static修饰变量定义时的汇编代码),而他又可以修改,所以他在数据段,选C.

localVar 没有任何修饰, 普通变量, 存在栈区, 选A

num1 数组,没有任何修饰,存在栈区, 选A

char2 字符数组,与num1相似, 存在栈区, 选A

*char2 字符数组中首元素,数组的每个元素都在栈区,选A

pChar3 指针变量,没有任何修饰,存放在栈区, 选A

*pChar3 指针指向的首元素,pChar指向一个字符串常量,该常量放在常量区,选D

ptr1 动态开辟空间,本事是一个指针,存在栈区,指向一块堆区的空间,选A

*ptr1 ptr1指向的对象,在堆区,选B

填空题

1. num1 是数组名,sizeof(数组名)求的是数组所占的内存,答案是类型大小乘元素数量,sizeof(int) * 10 也就是 40

2. char2 字符数组,因为以字符串给一个字符数组赋值会在末尾默认补'',所以答案是 5

3. 用strlen求字符串的大小,返回字符串的长度,"abcd"只有四个字符,答案是 4

4. pChar3是一个指针,指针的大小与类型无关,在32位环境是4,64位环境是8, 答案是 4 / 8

5. 此处求得是pChar3所指向字符串的长度, 答案和第三题一样, 4

6. ptr1是指针,答案是 4/8

转载请说明出处 内容投诉内容投诉
南趣百科 » C++内存问题(c内存问题)

南趣百科分享生活经验知识,是您实用的生活科普指南。

查看演示 官网购买