重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

C++内存问题-创新互联

目录

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、网络空间、营销软件、网站建设、内丘网站维护、网站推广。

内存四区

栈区

堆区

静态区:

常量区:

例题:

题解

选择题

填空题


内存四区

在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 字符数组,因为以字符串给一个字符数组赋值会在末尾默认补'\0',所以答案是 5

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

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

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

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

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站名称:C++内存问题-创新互联
网站链接:http://cqcxhl.com/article/ddgces.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP