服务器之家

服务器之家 > 正文

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

时间:2021-11-02 14:32     来源/作者:小猿笔记

内存分区模型

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

1 代码区

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

2 全局区

// 全局变量、静态变量、常量

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

#include <iostream>
using namespace std;

// 全局变量、静态变量、常量

//全局变量
int g_a=10;
int g_b=10;

//const修饰的全局常量
const int c_g_a = 10;
const int c_g_b = 10;

int main()
{
	//创建普通局部变量
	int a = 10;
	int b = 10;
	cout << "局部变量a的地址为:" << (int)&a << endl;//&a取地址,(int)强制转换为10进制
	cout << "局部变量b的地址为:" << (int)&b <<endl<<endl;

	//全局变量
	cout << "全局变量g_a的地址为:" << (int)&g_a << endl;
	cout << "全局变量g_b的地址为:" << (int)&g_b << endl<<endl;

	//静态变量
	static int s_a = 10;
	static int s_b = 10;
	cout << "静态变量s_a的地址为:" << (int)&s_a << endl;
	cout << "静态变量s_b的地址为:" << (int)&s_b << endl << endl;

	//常量(字符串常量、const修饰的变量)
	//字符串常量
	cout << "字符串常量的地址为:" << (int)&"hello word" << endl;
	
	//const修饰的变量(全局常量、局部常量)
	//const修饰的全局变量
	cout << "全局常量 c_g_a的地址为:" << (int)&c_g_a << endl;
	cout << "全局常量 c_g_b的地址为:" << (int)&c_g_b << endl;

	//const修饰的局部变量
	const int c_a = 10;
	const int c_b = 10;
	cout << "局部常量 c_a的地址为:" << (int)&c_a << endl;
	cout << "局部常量 c_b的地址为:" << (int)&c_b << endl << endl;

	system("pause");
	return 0;
}

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

总结

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

3 栈区

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

栈区注意事项

  • 不要返回局部变量的地址
  • 栈区的数据由编译器管理开辟和释放
#include <iostream>
using namespace std;

//栈区注意事项
//不要返回局部变量的地址
//栈区的数据由编译器管理开辟和释放

int *func(int b)//形参数据也存放在栈区
{
	b = 100;
	int a = 10;//局部变量:存放在栈区,栈区的数据在函数执行完毕自动释放
	return &a;//返回局部变量的地址
}
int main()
{
	//接受func函数的返回值
	int *p=func(1);
	cout << *p << endl;//第一次可以打印正确的数字,因为编译做了一次保留
	cout << *p << endl;//第二次,就没了,输出乱码

	system("pause");
	return 0;
}

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

4 堆区

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

#include <iostream>
using namespace std;
int *func()
{
	//利用new关键字,将数据开辟到堆区
	//指针本质也是局部变量,存放在栈上,指针保存的数据存放咋堆区
	int* p = new int(10);
	return p;
}
int main()
{
	//在堆区开辟数据
	int* q = func();
	cout << *q << endl;//与上一个程序对比,多输出几次
	cout << *q << endl;
	cout << *q << endl; 
	cout << *q << endl;

	system("pause");
	return 0;
}

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

5 new运算符

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

#include <iostream>
using namespace std;

//1.new的基本语法
int* func()
{
	//在堆区创建整形数据
	//new返回的是数据类型指针
	int* p = new int(10);
	return p;
}
//2.在堆区利用new 开辟数组
int main()
{
	//在堆区开辟数据
	int* q = func();
	cout << *q << endl;//与上一个程序对比,多输出几次
	cout << *q << endl;
	cout << *q << endl;

	//堆区数据是由程序员管理开辟、管理释放
	//如果想释放堆区数据,利用关键字delete
	delete q;
	cout << *q << endl;//内存已被释放,再次访问就是非法操作,报错

	system("pause");
	return 0;
}

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

#include <iostream>
using namespace std;

//1.new的基本语法


//2.在堆区利用new 开辟数组
void test()
{
	//创建10整形数据的数组,在堆区
	int *arr =new int[10];//10代表数组有10个元素

	for (int i = 0; i < 10; i++)
	{
		arr[i] = i + 100;//给10个元素赋值,100~109
	}
	for (int i = 0; i < 10; i++)
		cout << arr[i] << endl;

	//释放堆取数组
	//释放数组的时候,要加[]才可以,否则认为是只是放一个元素
	delete[] arr;
}
int main()
{
	test();
	system("pause");
	return 0;
}

C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)

注意:

  • 释放堆取数组
  • 释放数组的时候,要加[]才可以,否则认为是只是放一个元素

参考:
哔哩哔哩 黑马程序员

到此这篇关于C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)的文章就介绍到这了,更多相关C++ 内存分区模型内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_51233386/article/details/115975881

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部

467
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40