c++内存分类
1、 代码段:放置代码
2、 静态数据段:放置全局变量和static的局部变量,字符串常量
3、 动态数据段:栈,放置局部作用域的变量,离开函数返回后就会被释放;堆,必须手动的分配和释放。
关于字符串常量的说明
1、 一个字符串常量在程序内只有一份,是在静态存储区的,所有指向该常量值的指针都指向这个地址,一直到该程序结束才会被释放。
2、 常量是不能被修改的,通过指向它的指针或数组修改值时,会造成内存错误。
代码说明
char *test()
{
char *pp = "abcd";//该返回指针是有效的,因为字符串常量即使在函数返回后也不会//被释放,会一直存在的
char pp[] = "abcd";//该返回指针是无效的,因为函数返回后,该临时数组就被释放//了,指向的内容就是非法的
//通过下面是可行的,但是要注意内存的释放
char *pp = new char[5];
strcpy(pp, "abcd");
static char pp[] = "abcd";//返回指针有效,变量存储在静态区,并且其值还可以修改
cout << pp << endl;
return pp;
}
与类相关的内存分配
类中占用内存的有以下几部分
1、 代码段,这个只有一份,所有对象都是共用的
2、 变量段,包括自己的和从基类继承来的变量,静态变量不占用对象的内存大小
3、 虚函数指针,这个类有几个虚函数表,每个对象就需要有几个虚函数指针。
对象内存占用
空类或只含有函数的 类
占一个字节,这个字节里并没有什么内容
无继承有变量类
对象的大小就是所有变量所占的内存大小
无虚函数的简单继承
继承类对象大小就是基类和继承类里所有变量所占的内存之和
有虚函数的继承
除了上面说的之外,还多了一个指向虚函数的指针,并且这个类有几个基类,就会有几个这样的指针
c++内存分类的更多相关文章
- C/C++程序内存分类
程序中内存分类主要有下面几种: (1)栈存储区:主要存储局部变量.函数參数.函数返回值等. 栈内存由编译器在须要时自己主动分配,使用完后自己主动释放. (2)堆存储区:由new.malloc申请到的空 ...
- SQL Server 的内存分类
第一类. 根据申请方式分: commit 型 它是指先reserve申请一大块,再通过commit提交后得到的空间.这种方式申请到的空间可以启用 awe ! stolen型 与commit 相对应!它 ...
- C语言基础:内存 分类: iOS学习 c语言基础 2015-06-10 21:59 23人阅读 评论(0) 收藏
全局变量:定义在函数之外.(不安全) 局部变量;定义在函数之内. 内存的划分:1栈区 2堆区 3静态区(全局区) 4常量区 5代码区 栈区..静态区.常量区.代码区的数据都是由系统分配和释放 ...
- java运行时内存分类
主要有java栈(虚拟机栈), 堆 ,方法区. 线程私有: 栈: 每个方法执行的时候 都会同时创建一个栈桢 Stack Frame 用于存储 局部变量表, 操作数栈,动态链接, 方法出口等信息 线程 ...
- 【C语言】C语言程序所占内存分类
参考"http://blog.sina.com.cn/s/blog_63d4849c01014qg3.html" C语言内存分为5部分:堆.栈.全局(静态)区.常量区(只读)和代码 ...
- Sql Server 内存相关计数器以及内存压力诊断
在数据库服务器中,内存是数据库对外提供服务最重要的资源之一, 不仅仅是Sql Server,包括其他数据库,比如Oracle,MySQL等,都是一类非常喜欢内存的应用. 在Sql Server服务器中 ...
- Java当中的内存分配以及值传递问题内存解析
首先必须说明作为Java程序员对于内存只要有大致的了解就可以了,如果你对Java当中的某一个知识点在不需要分析内存分配过程的情况下可以掌握,那就大可不必去研究内存.如果你对知识点已经掌握,那么你应该把 ...
- 转:内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理][转载]
内存区划分.内存分配.常量存储区.堆.栈.自由存储区.全局区[C++][内存管理][转载] 一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放 ...
- google-perftools 分析JAVA 堆外内存
google-perftools 分析JAVA 堆外内存 分类: j2se2011-08-25 21:48 3358人阅读 评论(4) 收藏 举报 javahbasehtml工具os 原文转自:htt ...
随机推荐
- C语言顺序表
顺序表结构可设为一个数组和一个指向尾部的变量,数组用来存放元素,指向尾部的变量在插入元素的时候加一,删除元素的时候减一,始终指向尾部. typedef int elemtype; typedef st ...
- 从零开始一个http服务器(一)-开始
从零开始一个http服务器 (一) 代码地址 : https://github.com/flamedancer/cserver git checkout step1 一个简单的socket serve ...
- Linux字符设备驱动--No.2
分析中断注册函数:request_irq int butsOpen(struct inode *p, struct file *f) { int irq; int i; ; printk(KERN_E ...
- NOI2002银河英雄传说-带权并查集
[NOI2002]银河英雄传说-带权并查集 luogu P1196 题目描述 Description: 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年, ...
- 12-oauth密码模式identity server4实现
1-服务端代码, 配置类,可加 RequireClientSecret=false, 这样调用端就不需要传入client_secret参数 using System.Collections; usin ...
- WebRTC中Android Demo中的远程视频流的获取到传输
1.CallActivity#onCreate 执行startCall开始连接或创建房间 2.WebSocketClient#connectToRoom 请求一次服务器 3.回调到CallActivi ...
- java操作HDFS
package com.lei.hadoop; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Fil ...
- zipaligin的使用介绍
近来一直在做APK反编译和重编译的工作,针对一些apk需要放入一些相应的文件,(当然这里不涉及非法盈利,都是有合约的),在对一些包打包以后,发现可以通过一个叫做zipalign的工具进行优化,对于这个 ...
- 使用python+selenium控制手工已打开的浏览器
我们可以利用Chrome DevTools协议.它允许客户检查和调试Chrome浏览器. 打开cmd,在命令行中输入命令: chrome.exe --remote-debugging-port=922 ...
- js for循环实例
1.求1-100的寄数和? //2.奇数求和 var ppt=0 for(var i=1;i<=100;i+=2){ ppt+=i } 2.求1-100的偶数和 var num=0 for(va ...