内存分配、C++变量的生命周期和作用域
1.内存分配
程序的内存分配有以下几个区域:堆区、栈区、全局区、程序代码区,另外还有文字常量区。
栈区 ——存放局部变量,即由auto修饰的变量,一般auto省略。由编译器自动分配释放。局部变量定义在函数体内,且无static修饰。当程序执行进入函数后 ,才为变量分配存储空间。当退出函数后,自动释放分配的空间。
堆区 ——程序员要分配和释放的空间,就是new分配的内存块,编译器不参与管理这块内存的分配和释放。如果在函数内部new指针和申请内存的话,在函数内部不delete释放的话,在函数外部由于作用域的问题也不能进行释放,就会造成内存泄漏。
全局区(静态区) ——存储全局变量和静态变量。全局变量,其他文件中要使用必须用extern 关键字声明要引用的全局变量。静态变量分为静态局部变量和静态全局变量,都用static声明。
程序代码区 ——存放函数体的二进制代码。
2.C++变量的生命周期
全局变量、静态全局变量、静态局部变量——程序运行期一直存在。
局部变量——在局部作用域内有效,即程序执行时进入对应函数后,才为变量分配存储空间,退出该函数后,自动释放分配的空间。
3.C++变量的作用域
全局变量——全局作用域,在一个源文件定义,可用于所用原文件。其他文件使用要先做extern关键字声明。
静态全局变量——在本定义的文件中有效。
静态局部变量——局部作用域。
局部变量——局部作用域。
内存分配、C++变量的生命周期和作用域的更多相关文章
- C++ 炼气期之变量的生命周期和作用域
1. 前言 什么是变量的生命周期? 从变量被分配空间到空间被收回的这一个时间段,称为变量的生命周期. 什么是变量的作用域? 在变量的生命周期内,其存储的数据并不是在任何地方都能使用,变量能使用的范围, ...
- Java对象的生命周期与作用域的讨论(转)
导读: Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 + T2 +T3.其中T1表示对象的创建时间,T2表示对 ...
- [转]Android静态变量的生命周期
原文地址:https://my.oschina.net/jerikc/blog/137207 Android是用Java开发,其静态变量的生命周期遵守Java的设计.我们知道静态变量是在类被load的 ...
- 警惕rapidxml的陷阱:添加节点时,请保证变量的生命周期
http://www.cnblogs.com/chutianyao/p/3246592.html 项目中要使用xml打包.解析协议,HQ指定了使用rapidxml--号称是最快的xml解析器. 功能很 ...
- Android静态变量的生命周期
Android是用Java开发,其静态变量的生命周期遵守Java的设计.我们知道静态变量是在类被load的时候分配内存的,并且存在于方法区.当类 被卸载的时候,静态变量被销毁.在PC机的客户端程序中, ...
- Android中静态变量的生命周期
静态变量的生命周期,起始于类的加载,终止于类的释放.什么时候类会加载呢?我们知道,在app打开时,会创建一个进程,然后初始化一个dvm的实例,负责类的加载释放 和 垃圾回收等.换句话说,在进程创建之后 ...
- legend---六、php脚本变量的生命周期是怎样的
legend---六.php脚本变量的生命周期是怎样的 一.总结 一句话总结:应该是脚本结束变量的生命周期就完了 1.外部js找不到元素是怎么回事? 1 function myDailyTaskFin ...
- android中少用静态变量(android静态变量static生命周期)
在android中,要少用静态变量. 我现在做的一个应用中,之前的开发人员使用静态变量来存储cookie,这个全局的静态变量用来验证身份. 这时客户反应,应用长时间不使用,再次使用,会提示身份过期. ...
- JVM详解之:汇编角度理解本地变量的生命周期
目录 简介 本地变量的生命周期 举例说明 优化的原因 总结 简介 java方法中定义的变量,它的生命周期是什么样的呢?是不是一定要等到方法结束,这个创建的对象才会被回收呢? 带着这个问题我们来看一下今 ...
随机推荐
- BZOJ3755 : Pty爬山
l[i],r[i]表示站在i点往左往右走能看到的最高峰,用栈维护凸壳求出 h[i]表示i点能看到的最高峰的高度 a[i],b[i]表示i点往左往右走时反悔的点,即第一个h[j]>h[i]的j,用 ...
- Git Shell 安装版本
#!/bin/sh v1.; do echo "Begin install Git $ver."; git reset --hard git clean -fdx git chec ...
- 将java的class文件放到一个指定文件夹下
用javac执行java文件时,要把java文件的class文件放到指定文件夹下,注意文件夹要创建好,执行javac -d 文件夹 ***.java 如图: 在class文件夹下就出现了L的class ...
- [转]IE11下Forms身份认证无法保存Cookie的问题
本文转自:http://www.cnblogs.com/jaxu/p/3698377.html ASP.NET中使用Forms身份认证常见的做法如下: 1. 网站根目录下的Web.config添加au ...
- error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
今天在执行一个protobuf程序时,提示error while loading shared libraries: libprotobuf.so.8: cannot open shared obje ...
- Nginx 笔记与总结(13)Nginx 的 gzip 压缩
使用 FireFox(40.0)访问博客园(http://www.cnblogs.com/),观察 http 头信息 请求头信息: Accept-Encoding gzip, deflate 表示浏览 ...
- Javascript 笔记与总结(2-15)结构、样式、行为分离
[例] <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- eclipse编译异常修正:the project cannot be built until its prerequisite...
close错误的project,重新open , 再 clean下 .
- PHP常用验证正则表达式
PHP常用验证正则表达式 数字.手机号.QQ号.Url地址合法性校验 1.验证是否为整数 1 function isNumber($val) 2 { 3 if(ereg("^[0-9]+$& ...
- Unknown collation: 'utf8mb4_unicode_ci'
日前给一个政府机关做个小的门户网站,用的是wordpress+主题开发,部署时发现导入数据库sql文本时出现Unknown collation: 'utf8mb4_unicode_ci'的错误,查了下 ...