C++之内存分区的实现示例

 更新时间:2024年03月25日 16:28:52   作者:wszswllnzn_  
本文主要介绍了C++之内存分区的实现示例,主要包含了4个区域,分为代码区,全局区,栈区和堆区,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

C++程序在执行时,将内存大方向划分为4个区域

1.代码区:存放函数体的二进制代码,由操作系统进行管理;
2.全局区:存放全局变量和静态变量以及常量;
3.栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等;
4.堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。

C++中主要利用new在堆区开辟内存,堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete。

利用new创建的数据,会返回该数据对应的类型的指针

例如:

int* func()//返回int指针的函数
{
	int* a = new int(10);
	return a;
}

int main() {
	int *p = func();
	cout << *p << endl;
	//利用delete释放堆区数据
	delete p;//要记得释放!!
	//cout << *p << endl; //报错,释放的空间不可访问
	system("pause");
	return 0;
}

new的释放:

delete p;//p不是数组变量
delete[] p;//p是数组

栈区的数据由编译器释放,因此函数中的局部变量不能作为地址或者引用返回

//错误示范1:
int * func()
{
	int a = 10;
//若是用static把局部变量变为静态变量,则可以用
//static int a =10;
	return &a;
}
int main() {
	int *p = func();
	cout << *p << endl;
	system("pause");
	return 0;
}


//错误示范2:
/返回局部变量引用
int& test01() {
	int a = 10; //局部变量
//若是用static把局部变量变为静态变量,则可以用
//static int a =10;
	return a;
}
int main()
{
	//不能返回局部变量的引用
	int& ref = test01();
	cout << "ref = " << ref << endl;
}

正确使用函数中局部变量作为值返回
例如:

#include <iostream>
using namespace std;

int test01() {
    int a = 10; //局部变量
	return a;
}
int main() {

	int ref = test01();
	cout << "ref = " << ref << endl;
}

到此这篇关于C++之内存分区的实现示例的文章就介绍到这了,更多相关C++ 内存分区内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • 基于curses库实现弹球游戏

    基于curses库实现弹球游戏

    这篇文章主要为大家详细介绍了基于curses库实现弹球游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 深入理解c++指针的指针和指针的引用

    深入理解c++指针的指针和指针的引用

    下面小编就为大家带来一篇深入理解c++指针的指针和指针的引用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考,一起跟随小编过来看看吧
    2016-06-06
  • C语言数组全面总结梳理

    C语言数组全面总结梳理

    在C语言和C++等语言中,数组元素全为指针变量的数组称为指针数组,指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量。指针数组比较适合用来指向若干个字符串,使字符串处理更加方便、灵活
    2022-02-02
  • C++中模板(Template)详解及其作用介绍

    C++中模板(Template)详解及其作用介绍

    这篇文章主要介绍了C++中模板(Template)的详解及其作用介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • C++迭代器介绍(iterator、const_iterator、reverse_interator、const_reverse_interator)

    C++迭代器介绍(iterator、const_iterator、reverse_interator、const_rev

    这篇文章主要介绍了C++迭代器介绍(iterator、const_iterator、reverse_interator、const_reverse_interator),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C语言实现常用字符串库函数(推荐)

    C语言实现常用字符串库函数(推荐)

    这篇文章主要介绍了C语言实现常用字符串库函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • 实例讲解C++编程中lambda表达式的使用

    实例讲解C++编程中lambda表达式的使用

    这篇文章主要介绍了C++编程中lambda表达式的使用实例,lambda表达式特性的引入在C++11中可谓千呼万唤始出来,非常重要,需要的朋友可以参考下
    2016-01-01
  • 浅谈几种常见语言的命名空间(Namespace)

    浅谈几种常见语言的命名空间(Namespace)

    本文给大家简单介绍了下几种常见语言的命名空间的特性以及简单示例,大家对比下,有需要的小伙伴可以参考下
    2016-03-03
  • Qt之ui在程序中的使用-多继承法介绍

    Qt之ui在程序中的使用-多继承法介绍

    本文将介绍Qt之ui在程序中的使用-多继承法,需要的朋友可以参考
    2012-11-11
  • C语言中system()函数的用法总结

    C语言中system()函数的用法总结

    system()函数功能强大。以下小编就为大家介绍一下在C语言中system()函数的用法。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10

最新评论

?


http://www.vxiaotou.com