博客
关于我
C++基础(六)栈、堆、new关键字、delete关键字
阅读量:265 次
发布时间:2019-03-01

本文共 1499 字,大约阅读时间需要 4 分钟。

全局变量、静态变量及常量的存储位置分析

在编程中,理解变量的存储位置对程序的运行机制有着深刻的影响。全局变量、静态变量和常量的存储位置各有不同,这一点对于任何一个C程序员来说都至关重要。

全局变量的存储位置在程序的运行时环境中。全局变量是指在程序运行时,所有函数都能访问的变量。它们的生命周期从程序开始直到程序结束。

静态变量的存储位置则是在程序的运行时内存中,但它们的生命周期与函数的调用有关。静态变量通常在函数内部声明,程序运行时只会初始化一次,并在程序结束后未被销毁。

至于常量,它们的存储位置取决于如何定义。如果是一个本地常量(如int main()中的常量),则会在程序运行时的栈中分配存储空间。如果是一个全局常量(如const int GLOABL_CONST = 123;),则会在程序的全局内存区分配存储空间。

局部变量的声明周期与栈的使用有关。在函数调用时,局部变量会被压入栈中,函数返回后变量会被弹出栈中,释放内存空间。这种机制允许程序在多次函数调用时,正确地管理局部变量的内存。

关于动态内存管理,C语言提供了new和delete操作符来手动管理内存。在使用new操作符时,程序会在堆中分配一块内存空间,并将指针返回。使用delete操作符时,程序会释放这块内存空间。需要注意的是,使用new时如果分配的是数组,必须使用delete[]来释放;如果分配的是单个对象,使用delete即可。

例如,在以下代码中,run()函数使用new操作符在堆中分配一块内存,返回指针。main函数调用run()获取指针并输出值。需要注意的是,调用delete操作符后,指针将失效,不能再被使用。

#include 
using namespace std;int* run() { int a = 100; int* a1 = new int(100); return a1;}int main() { int * p = run(); cout << *p << endl; delete p; // 不能再使用p指针了 system("pause"); return 0;}

在另一个例子中,run2函数使用new操作符分配一个内存块,返回指针。main函数调用run2获取指针数组p2,并在循环中修改数组中的值。最后使用delete[] p2来释放数组内存。

#include 
using namespace std;int* run() { int a = 100; int* a1 = new int(100); return a1;}int* run2() { int* p = new int[10]; return p;}int main() { int * p = run(); cout << *p << endl; delete p; int* p2 = run2(); for (int i = 0; i < 10; i++) { p2[i] = 100 + i; } for (int i = 0; i < 10; i++) { cout << p2[i] << endl; } delete[] p2; system("pause"); return 0;}

这些机制为程序提供了对内存的精确控制,但也需要程序员谨慎管理,避免内存泄漏或指针失效。

转载地址:http://efzo.baihongyu.com/

你可能感兴趣的文章
NodeMCU教程 http请求获取Json中文乱码解决方案
查看>>
Nodemon 深入解析与使用
查看>>
NodeSession:高效且灵活的Node.js会话管理工具
查看>>
node~ http缓存
查看>>
node不是内部命令时配置node环境变量
查看>>
node中fs模块之文件操作
查看>>
Node中同步与异步的方式读取文件
查看>>
node中的get请求和post请求的不同操作【node学习第五篇】
查看>>
Node中的Http模块和Url模块的使用
查看>>
Node中自启动工具supervisor的使用
查看>>
Node入门之创建第一个HelloNode
查看>>
node全局对象 文件系统
查看>>
Node出错导致运行崩溃的解决方案
查看>>
Node响应中文时解决乱码问题
查看>>
node基础(二)_模块以及处理乱码问题
查看>>
node安装卸载linux,Linux运维知识之linux 卸载安装node npm
查看>>
node安装及配置之windows版
查看>>
Node实现小爬虫
查看>>
Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
查看>>
Node提示:npm does not support Node.js v12.16.3
查看>>