首先我们来了解一下 C++ 内存分区的四个部分:代码区、全局区、栈区和堆区。
代码区
代码区是用于存放程序的可执行代码,是只读的,它的大小在程序编译时就已经确定了。在代码区中,每个函数都有一个入口地址,这些入口地址按照函数声明的顺序保存在函数表中。
全局区
全局区用于全局变量和静态变量的存储,它在程序运行前就已经分配好了固定的内存空间,程序结束时才会被释放。全局区的变量可以被整个程序访问。
示例:
#include <iostream>
using namespace std;
int global; // 定义一个全局变量
int main() {
global = 10; // 对全局变量进行赋值
cout << global << endl; // 输出 global 的值
return 0;
}
栈区
栈区是用于存储局部变量和函数参数的内存区域。栈区是后进先出的,它的大小在程序运行期间动态地变化。当一个函数被调用时,它的参数和局部变量都会被压入栈中,当函数返回时,这些变量会被弹出栈,栈区的空间也会被释放。
示例:
#include <iostream>
using namespace std;
int main() {
int n = 10; // 声明一个局部变量 n
cout << n << endl; // 输出 n 的值
return 0;
}
堆区
堆区是程序运行时动态分配内存的区域。在堆区中,程序员可以根据需要手动分配和释放内存,这样可以使程序更加灵活。堆区的内存空间是不连续的,分配和释放的方式是通过 new 和 delete 关键字来实现的。
示例:
#include <iostream>
using namespace std;
int main() {
int* p = new int; // 动态分配一个整型变量
*p = 10; // 对这个变量进行赋值
cout << *p << endl; // 输出变量的值
delete p; // 释放变量占用的内存空间
return 0;
}
以上就是 C++ 内存分区的详细介绍,希望能对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解C++内存的代码区,全局区,栈区和堆区 - Python技术站