C++博客 :: 首页 :: 联系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用链接

留言簿(48)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 397330
  • 排名 - 59

最新评论

阅读排行榜

评论排行榜

内存的三种分配方式:静态存储区分配,栈上分配,堆上分配。

内存使用常见错误

(1)内存分配不成功,却使用它。对策:使用前检查内存是否为NULL。

(2)内存分配成功,但没有初始化就使用它。对策:内存分配后初始化。

(3)内存分配成功且已经初始化,但是越界。对策:做越界检查。

(4)忘记释放内存,造成内存泄漏。对策:内存动态分配和释放必须成双配对。

(5)释放了内存却继续使用它。

(a)对象关系过于复杂,理不清楚究竟释放了没有。

(b)return指向栈内存的指针或引用。

(c)free或delete内存后,没有把指针置为NULL。导致野指针。

指针与数组。数组名对应着(而不是指向)一块内存,在生存期内,其地址不可改变,只能是数组内容改变。

sizeof():

sizeof(数组)= 数组元素个数*sizeof(数组的元素数据类型)。

sizeof(指针)= 4;

数组作为参数传递时,数组名自动退化为指针类型,即sizeof(数组)=4;

sizeof(结构体或者类):这个有点麻烦,和编译器的设置有关系,pragma pack(n)是编译器指定的内存字节对齐方式,sizeof(结构或者类)和pragma pack(n)关系密切,默认的n=8,结构中的成员占用的内存起始地址为成员的数据类型的大小和n相比较的较小值。

指针参数

不要让指针参数在函数体内部申请内存,如果非要指针在函数体内部申请内存,就要用指针的指针。函数的返回值不能使用栈内分配的变量地址。

野指针:用malloc和new 分配了内存,就得用free和delete 释放,否则造成内存泄漏,但是只释放内存还是不够安全的,必须在释放内存后,让指针指向NULL,才不至于造成野指针。我理解的野指针就是没有正确指向的指针。

posted on 2008-01-18 14:40 sdfasdf 阅读(4213) 评论(7)  编辑 收藏 引用 所属分类: C++

Feedback

# re: 《高质量C++编程指南:内存管理》学习笔记[未登录] 2008-01-18 16:09 jarod
感觉这本书的观点就是程序的效率在于内存管理.但实际却不光是这点.把这一小部份当本书来读,有些浪费时间.  回复  更多评论
  

# re: 《高质量C++编程指南:内存管理》学习笔记 2008-01-18 19:19 小不点
"不要让指针参数在函数体内部申请内存,如果非要指针在函数体内部申请内存,就要用指针的指针"
这句话的意思可不可以这样理解->如果在函数体里面分配,由于指针也是按值传递,所以只是在函数体内部被改变了,而函数体外面还没有改变。而参数是指针的指针这时候达到的效果就相当于引用传参,同时也改变了函数外面的值。  回复  更多评论
  

# re: 《高质量C++编程指南:内存管理》学习笔记 2008-01-18 20:34 秦歌
yes,我认为你的理解是正确的,我也是这么想的,林锐也是这么解释的!  回复  更多评论
  

# re: 《高质量C++编程指南:内存管理》学习笔记 2008-05-15 21:22 海天
你好:关于学习《高质量C/C++编程指南》的读后感
我看了你的博客,老师要我们交个报告,论文格式,要八张纸,我写不了这么多体会,能否指教你下,帮我写分体会,让我参考下,谢谢了,QQ309461627
chenhongyunan@126.com

  回复  更多评论
  

# re: 《高质量C++编程指南:内存管理》学习笔记 2009-09-13 10:47 但是
上面说的内存管理还可以吧,www.roomdream.cn筑梦吧  回复  更多评论
  

# re: 《高质量C++编程指南:内存管理》学习笔记[未登录] 2011-08-12 15:18 Chipset
这也叫内存管理器呀,太肤浅了吧。  回复  更多评论
  

# re: 《高质量C++编程指南:内存管理》学习笔记[未登录] 2011-08-12 15:23 Chipset
静态存储区是个什么位置,我怎么没有听说过啊,我孤陋寡闻了。

下面给出了x86部分系统上一个进程的内存布局。
Linux FreeBSD MaxOS WinXP DOS AmigaOS 4.1 32位Vista Home
栈 栈 栈 堆 堆 代码 bss
堆 堆 堆 bss 栈 堆 常量
bss bss bss 常量 bss bss 代码
常量 常量 常量 代码 常量 常量 堆
代码 代码 代码 栈 代码 栈 栈
  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理