C++ 程序运行前内存分区模型

C++核心编程
本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓。
1、内存分区模型
C++程序在执行时,将内存大方向划分为4个区域
●代码区:存放函数体的二进制代码,由操作系统进行管理的
●全局区:存放全局变量和静态变量以及常量
●栈区:|由编译器自动分配释放,存放函数的参数值,局部变量等
●堆区:由程序员分配和释放若程序员不释放程序结束时由操作系统回收
内存四区意义:
不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程

1.1程序运行前
在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域
代码区:
存放CPU执行的机器指令
代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可
代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令
全局区:
全局变量和静态变量存放在此.
全局区还包含了常量区,字符串常量和其他常量也存放在此.
该区域的数据在程序结束后由操作系统释放.

#include<iostream>
#include<string>
using namespace std;int main() {//创建普通局部变量int a = 10;int b = 10;cout << "局部变量a的地址为:" << (int)&a << endl;cout << "局部变量b的地址为:" << (int)&b << endl; system(" pause") ;}

全局变量:

#include<iostream>
#include<string>
using namespace std;int g_a = 10;
int g_b = 10;int main() {//创建普通局部变量int a = 10;int b = 10;cout << "局部变量a的地址为:" << (int)&a << endl;cout << "局部变量b的地址为:" << (int)&b << endl; cout << "全局变量g_a的地址为 : " << (int)&g_a << endl;cout << "全局变量g_b的地址为 : " << (int)&g_b << endl;system(" pause") ;}

局部变量的内存地址和全局变量的内存地址明显不不一块区域

静态变量:

#include<iostream>
#include<string>
using namespace std;int g_a = 10;
int g_b = 10;int main() {//创建普通局部变量int a = 10;int b = 10;cout << "局部变量a的地址为:" << (int)&a << endl;cout << "局部变量b的地址为:" << (int)&b << endl; cout << "全局变量g_a的地址为 : " << (int)&g_a << endl;cout << "全局变量g_b的地址为 : " << (int)&g_b << endl;//静态变量   在普通变量前用static关键字修饰static	int g_a = 10;static  int g_b = 10;cout << "静态变量g_a的地址为 : " << (int)&g_a << endl;cout << "静态变量g_b的地址为 : " << (int)&g_b << endl;system(" pause") ;}

 

字符串常量:

#include<iostream>
#include<string>
using namespace std;int g_a = 10;
int g_b = 10;int main() {//创建普通局部变量int a = 10;int b = 10;cout << "局部变量a的地址为:" << (int)&a << endl;cout << "局部变量b的地址为:" << (int)&b << endl; cout << "全局变量g_a的地址为 : " << (int)&g_a << endl;cout << "全局变量g_b的地址为 : " << (int)&g_b << endl;//静态变量   在普通变量前用static关键字修饰static	int g_a = 10;static  int g_b = 10;cout << "静态变量g_a的地址为 : " << (int)&g_a << endl;cout << "静态变量g_b的地址为 : " << (int)&g_b << endl;//常量//字符串常量cout << "he1lo world字符串常量的地址为:" << (int)&"he1lo world" << endl;//const修饰的变量system(" pause") ;}

#include<iostream>
#include<string>
using namespace std;int g_a = 10;
int g_b = 10;const int c_g_a = 10;  //const修饰的全局变量  全局的常量
const int c_g_b = 10;int main() {//创建普通局部变量int a = 10;int b = 10;cout << "局部变量a的地址为:" << (int)&a << endl;cout << "局部变量b的地址为:" << (int)&b << endl; cout << "全局变量g_a的地址为 : " << (int)&g_a << endl;cout << "全局变量g_b的地址为 : " << (int)&g_b << endl;//静态变量   在普通变量前用static关键字修饰static	int g_a = 10;static  int g_b = 10;cout << "静态变量g_a的地址为 : " << (int)&g_a << endl;cout << "静态变量g_b的地址为 : " << (int)&g_b << endl;//常量//字符串常量cout << "he1lo world字符串常量的地址为:" << (int)&"he1lo world" << endl;//const修饰的变量//const修饰的全局变量,const修 饰的局部变量、cout << " 全局常量 c_g_a的地址为 : " << (int)&c_g_a << endl;cout << " 全局常量 c_g_b的地址为 : " << (int)&c_g_b << endl;system("pause") ;}

 全局常量:

 

#include<iostream>
#include<string>
using namespace std;int g_a = 10;
int g_b = 10;const int c_g_a = 10;  //const修饰的全局变量  全局的常量
const int c_g_b = 10;int main() {//创建普通局部变量int a = 10;int b = 10;cout << "局部变量a的地址为:" << (int)&a << endl;cout << "局部变量b的地址为:" << (int)&b << endl; cout << "全局变量g_a的地址为 : " << (int)&g_a << endl;cout << "全局变量g_b的地址为 : " << (int)&g_b << endl;//静态变量   在普通变量前用static关键字修饰static	int g_a = 10;static  int g_b = 10;cout << "静态变量g_a的地址为 : " << (int)&g_a << endl;cout << "静态变量g_b的地址为 : " << (int)&g_b << endl;//常量//字符串常量cout << "he1lo world字符串常量的地址为:" << (int)&"he1lo world" << endl;//const修饰的变量//const修饰的全局变量,const修 饰的局部变量、cout << " 全局常量 c_g_a的地址为 : " << (int)&c_g_a << endl;cout << " 全局常量 c_g_b的地址为 : " << (int)&c_g_b << endl;const int c_l_a = 10; // c-const  g - global 1 - 1ocalconst int c_l_b = 10;cout << " 局部常量c_l_a的地址为 : " << (int)&c_l_a << endl;cout << " 局部常量c_l_b的地址为 : " << (int)&c_l_b << endl;system("pause") ;}

总结:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 程序运行后的内存模型

程序运行后 栈区: 由编译器自动分配释放,存放函数的参数值,局部变量等 注意事项:不要返回局部变量的地址&#xff0c;栈区开辟的数据由编译器自动释放 #include<iostream> #include<string> using namespace std;int* func() {int a 10; //局部变量放在栈区&am…

C++ 函数的引用传递

#include<iostream> #include<string> using namespace std;//1、值传递 void mySwap01(int a, int b) {int temp a;a b;b temp;cout << "mySwap01 a" << a << endl;cout << "mySwap01 b" << b << end…

C++ 常量引用

#include<iostream> #include<string> using namespace std;int main() {//常量引用//使用场景:用来修饰形参&#xff0c;防止误操作//int a 10;//加上const之后编译器将代码修改int temp 10; const int & ref temp; const int & ref 10;//引用必须引一…

C++ 函数重载碰到默认的参数

#include<iostream> #include<string> using namespace std;//引用作为重载的条件 void func(int &a) { //非常量引用cout << " this is func" << endl; }void func(const int &a) { // 常量引用 const int &a 10; 合…

C++ 对象的初始化和清理

4.2对象的初始化和清理 ●生活中我们买的电子产品都基本会有出厂设置,在某-天我们不用时候也会删除一些自己信息数据保证安全 ●C中的面向对象来源于生活&#xff0c;每个对象也都会有初始设置以及对象销毁前的清理数据的设置。 4.2.1构造函数和析构函数 对象的初始化和清理也是…

C++ 深拷贝与浅拷贝

#include<iostream> using namespace std; #include<string>class Person {public:Person() {cout << "Person的无参构造函数调用" << endl;};Person(int age) {m_Age age;cout << "Person的有参构造函数调用" << en…

转载]Cyclone II JTAG ASP 配置下载程序

原文&#xff1a;http://blog.sina.com.cn/s/blog_4739958a0100irp7.html 首先&#xff0c;还是那句话&#xff0c;电脑上写好程序.pof文件直接通过JTAG写到FPGA SRAM里&#xff0c;掉电丢失。 只有把.pof写到串行配置器件上&#xff0c;板子上电后串行配置器件EPCS4将程序自动…

C++ 类和对象成员特性

//当类中成员是其他类对象时&#xff0c;我们称该成员为对象成员 //构造的顺序是:先调用对象成员的构造&#xff0c;再调用本类构造 //析构顺序与构造相反 #include <iostream> using namespace std; #include <string>class Phone{public:Phone(string name){m_P…

C++ 静态成员

静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员 静态成员分为: ●静态成员变量 。所有对象共享同一份数据 。在编译阶段分配内存 。类内声明&#xff0c;类外初始化 ●静态成员函数I 。所有对象共享同一个函数 。静态成员函数只能访问静态成员变量 #include…

C++ 静态成员函数

#include <iostream> using namespace std; #include <string>class Person{public://静态成员函数特点://1程序共享一个函数//2静态成员函数只能访问静态成员变量static void func(){cout << "func调用" << endl;m_A 100;//m. _B 100; //…

C++ 文件写操作

#include <fstream> #include<iostream> using namespace std;void test01(){ofstream ofs;ofs.open("test.txt",ios :: out);ofs << "姓名:张三"<< endl;ofs << "性别:男"<< endl;ofs << "年龄…

winform 分页控件分享(二)

大数量分页&#xff0c;使用存储过程。 这个存储过程是网络上考的&#xff0c;呵呵。我把它给贴出来&#xff0c;希望原作者别砸我砖头。。。。。 ALTER PROCEDURE SP_Pagination/**//****************************************************************** 千万数量级分页存…

C++ 二进制文件写操作

#include<iostream> using namespace std; #include<fstream>class Person { public:char m_Name[64]; //姓名int m_Age; //年龄};void test01(){//1、包含头文件//2.创建流对象ofstream ofs("person.txt",ios::out | ios::binary);//3、打开文件//ofs.o…

C++ 二进制文件读操作

读二进制文件 二进制方式读文件主要利用流对象调用成员函数read 函数原型:[ istream& read(char *buffer,int len); 参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数 示例: #include <fstream> #include <string> #include<iostream>…

C++ 使用模板Template

template --声明创建模板I typename -- 表面其后面的符号是一种数据类型&#xff0c;可以用class代替 T --- 通用的数据类型&#xff0c;名称可以替换&#xff0c;通常为大写字母 使用模板之前&#xff1a; #include<iostream> using namespace std; #include<strin…

程序员常用字体(vs2008字体修改方案)

字体不仅是设计师手中重要的武器&#xff0c;对我们开发人员来说&#xff0c;字体的选择也有许多讲究&#xff0c;一个好的、适合展示代码的字体&#xff0c;应该具备以下要素&#xff1a; 等宽的字符简洁、清晰并且规范的字符形状支持ASCII码为128以上的扩展字符集与字符同等宽…

三分法解决凸(凹)函数极值问题

二分法只适用与线性函数&#xff0c;当函数脱离线性而呈现凸性或者凹性的时候&#xff0c;三分是很有必要的。 三分过程如下图&#xff1a; 凸函数&#xff1a; 凹函数&#xff1a; 实现方法&#xff1a; double Calc(double p) {/*...*/ }double Solve(double MIN, double MAX…

计算机网络原理(第一章)课后题答案

第一章 1.什么是计算机网络&#xff1f; 计算机网络是互联、自治的计算机集合 自治&#xff1a;计算机系统彼此独立&#xff0c;不存在主从或控制与被控制的关系 互联&#xff1a;利用通信线路链接&#xff0c;连接相互独立的计算机系统 2.网络协议的三要素是什么&#xf…

计算机网络原理(第二章)课后题答案

第二章 1.计算机网络应用可以分为哪几种体系结构的应用类型&#xff1f;各种应用类型的特点是什么&#xff1f; C/S结构&#xff1a;通信旨在客户与服务器之间进行&#xff0c;客户与客户不直接通信 纯P2P结构&#xff1a;没有永远在线的服务器&#xff0c;任意端系统/结点之…