c++基础知识-程序内存模型

一、程序内存模型

根据运行前与运行后,一共分为四大区域:

1.程序运行前:代码区、全局区;

2.程序运行后:栈区、堆区;

 

二、代码区

程序运行前写的所有代码,最后全部转换成二进制录入电脑

 

三、全局区

包括:

全局变量:写在函数体之外的变量;

静态变量:在普通变量前加关键字static;

常量:字符串常量与const修饰的全局变量;

 

四、栈区

局部变量、形参;该区域数据是由编译器管理开辟和释放。

注:不要返回局部变量地址!

 

五、堆区

由程序员分配释放,程序结束时由系统回收。

利用new关键字,可将数据开辟到堆区,即地址不会被自动释放。

可利用关键字delete释放数据。

 1 //new基本语法
 2 int* func()
 3 {
 4     int * p=new int(10); //new返回是该数据类型指针
 5     return p;
 6 }
 7 //堆区开辟数组
 8 void test01()
 9 {
10     //创建10整型数据的数据在堆区
11     int* arr = new int[10]; //10代表数组有10个元素
12     for (int i = 0; i < 10; i++)
13     {
14         arr[i] = i + 100;
15     }
16     for (int i = 0; i < 10; i++)
17     {
18         cout << arr[i] << endl;
19     }
20     //释放堆区数组:加中括号
21     delete[] arr;
22 }
23 
24 int main()
25 {
26     int* m = func();
27     cout << *m << endl; //堆区数据不会自动释放
28     //用关键字delete释放
29     delete m;
30     test01();
31 
32 }

 

 

TRANSLATE with x

English

Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  


 

TRANSLATE with

COPY THE URL BELOW

Back

EMBED THE SNIPPET BELOW IN YOUR SITE

Enable collaborative features and customize widget: Bing Webmaster Portal
Back

推荐这些文章:

c++内存分区模型

代码区:存放所有代码的二进制
全局区,存放全局变量,静态变量,常量
栈区,编译器自动分配与释放,存放函数参数值和局部变量,随函数结束而释放
堆区,有程序员进行分配与释放,或者函数结束时自动释放
不同区域用于存放那个不同的数据,有不同的生命周期
在程序编写完,编译后,生成exe文件,这时已经出现两个区域,代码区和全局区,代码区存放cpu执行的机器指令,自身是共享的和只读的,全局区存放全局变量,静态变量常量(字符串常量,全局常量)这些,存在于程序运行的所有过程,直到程序结束,栈区和堆区是在程序正式运行时才生成的。
静态变量:static 数据类型 变量名 = 变量值,存在全局区
字符串常量,不是...

c++程序的内存分区

代码区

常量区

全局数据区

堆区

栈区

1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量值等。
2、堆区(heap):一般由程序员分配释放,随叫随到,挥之即走。
3、全局/静态区(static):全局变量和静态变量的存储是放在一起的,在程序编译时分配。
4、文字常量区:存放常量字符串。
5、程序代码区:存放函数体(包括类的成员函数、全局函数)的二进制代码

...

c++基础知识vector

vector

#include <vector>
#include <algorithm>
vector<int> arr(26,0); //生成26个元素的数组arr,且都初始化为0
arr[str[i]-'a']++; //若str[i]是字母,则可以这样写。str[i]若是'a',则arr[0]++;
sort(arr.begin(),arr.end()); 排序
遍历for(vector<int>::iterator it=arr.begin();it!=arr.end();it++) 或者
for(auto it=arr.begi...

074.程序的内存模型-内存四区-堆区

#include <iostream>
using namespace std;

int* func()
{
//利用new关键字 可以将数据开辟到堆区
//指针本质也是局部变量,放在栈上,指针保存的数据是放在了堆区
int* p = new int(10);
return p;
}
int main()
{
//在堆区开辟数据
int* p = func();
cout << *p << endl;
cout << *p << endl;
system("...

073.程序的内存模型-内存四区-栈区

#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 << end...

c++基础知识回顾

-C++基础知识汇集总结

作者:mohistH
出处:https://www.cnblogs.com/pandamohist/
本文版权归作者和博客园共有,谢绝一切形式的转载,否则将追究法律责任。

...

【操作系统】c++程序的内存分配

进程在
内存中的分区情况
是这样的:

1,
栈区(stack):栈区是由编译器自动分配和释放的,主要存放局部变量、函数参数值等,就连函数的调用过程都是用栈来完成的。

栈空间的大小是有限制的,一般是1~8Mb,跟操作系统有关,所以如果需要申请大块内存的时候栈空间往往是不够用的,需要借助堆(heap)内存来存储。

每一个线程都会有一个自己的栈空间。

栈区内存的生长方向是
从高到低的。

2,
堆区(heap):这个区域的内存空间是由程序猿管理的一段内存区域,由程序猿手动申请,同时使用完之后需要手动释放。如果程序猿...

c++初始化列表

初始化列表
作用:
C++提供了初始化列表语法,用来初始化属性
语法:构造函数():属性1(值1),属性2(值2)... {}
示例:

class Person {
public:

////传统方式初始化
//Person(int a, int b, int c) {
// m_A = a;
// m_B = b;
// m_C = c;
//}

//初始化列表方式初始化
Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}
void Pri...

c++程序运行后内存

栈区,编译器运行程序中自动保存,自动释放
注意不要放回函数的局部变量的地址,因为函数结束后就自动的销毁了,所以此时这个局部变量得地址无用,形参也是一个局部变量,因为是拷贝过去的
堆区,程序员手动申请,手动释放
new用来申请内存
数据类型 *变量名 = new 数据类型 变量
return 变量名
new返回的是该数据类型的指针
这样变量名中保存的就是堆区的的地址,指针本质其实是一个局部变量,保存在栈区,但是指针指向的数据存储于堆区,而在函数返回时返回的是指针变量的值,这样指针局部变量虽然被销毁了,但是保存堆区地址的值却返回了,因为堆区不是局部变量,所以不会随函数结束而销毁,因此依旧存在意义...

075.程序的内存模型-new运算符

#include <iostream>
using namespace std;

//1.new的基本语法
int* func()
{
//在堆区创建整数数据
//new返回是 该数据类型的指针
int* p = new int(10);
return p;
}

void test01()
{
int* p = func();
cout << *p << endl;
cout << *p << endl;
cout << *p << end...

文章标题:c++基础知识-程序内存模型
文章链接:https://www.dianjilingqu.com/4167.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>