【C/C++知识点】程序内存分区

简介: 【C/C++知识点】程序内存分区

程序内存分区



9831df8126ec4d0aa120ce0bac8e47a6.png

1、栈区(stack): 由编译器自动分配释放,存放函数的参数值,局部变量值等。


2、堆区(heap): 一般由程序员分配释放,随叫随到,挥之即走。


3、全局/静态区(static): 全局变量和静态变量的存储是放在一起的,在程序编译时分配。


4、文字常量区: 存放常量字符串。


5、程序代码区: 存放函数体(包括类的成员函数、全局函数)的二进制代码


使用动态内存的好处: 栈区的空间大小是有限制的,windows 上一般是 1M - 2M 。如果使用堆的话,64 位 windows10 系统的限制是 2G 。


内存泄漏: 是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

#include<bits/stdc++.h>
using namespace std;
int num1 = 58;
static int num2 = 18;
//1.栈的内存
void demo_1(const char* msg) {//函数的参数和局部变量存放在栈区
    int x, y, z;
}
int main()
{
    //4.字符串常量
    const char* p1 = "123"; 
    const char* p2 = "321";
    //3.全局变量/静态变量
    cout << num1 << endl;
    cout << num2 << endl;
    //2.堆,动态内存分配
    int* q = new int;
    *q = 10;
    cout << *q << endl;
    delete q;     //delete后的动态内存禁止访问
    return 0;
}


目录
相关文章
|
16天前
|
NoSQL 测试技术
内存程序崩溃
【10月更文挑战第13天】
110 62
|
4天前
|
存储 缓存 Java
结构体和类在内存管理方面的差异对程序性能有何影响?
【10月更文挑战第30天】结构体和类在内存管理方面的差异对程序性能有着重要的影响。在实际编程中,需要根据具体的应用场景和性能要求,合理地选择使用结构体或类,以优化程序的性能和内存使用效率。
|
1月前
|
存储 程序员 编译器
简述 C、C++程序编译的内存分配情况
在C和C++程序编译过程中,内存被划分为几个区域进行分配:代码区存储常量和执行指令;全局/静态变量区存放全局变量及静态变量;栈区管理函数参数、局部变量等;堆区则用于动态分配内存,由程序员控制释放,共同支撑着程序运行时的数据存储与处理需求。
90 21
|
20天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
23天前
|
存储 C语言 C++
【C++打怪之路Lv6】-- 内存管理
【C++打怪之路Lv6】-- 内存管理
34 0
【C++打怪之路Lv6】-- 内存管理
|
29天前
|
C++
C/C++内存管理(下)
C/C++内存管理(下)
46 0
|
29天前
|
存储 Linux C语言
C/C++内存管理(上)
C/C++内存管理(上)
35 0
|
1月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
42 0
|
3月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
339 0
|
15天前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
30 1