c#相较于c,c++而言,在内存管理上为程序员提供了极大的方便,解放了程序员与内存地址打交道,提高了程序员的工作效率。比如c中分配的malloc堆空间没有释放导致的内存泄露,数组越界导致的踩内存错误,使用了已释放的内存空间错误等等。这些在C#中统统的都不存在,主要是由于clr提供的安全检查机制...
分类:
编程语言 时间:
2014-12-27 13:50:29
阅读次数:
231
STL源码分析—空间配置器
空间配置器中门道
在STL中的容器里都是使用统一的空间配置器,空间配置器就是管理分配内存和销毁内存的。在STL将在heap空间创建一个对象分为两个步骤,第一是申请一块内存,第二是在这块内存中初始化一个对象。首先申请空间是由malloc提供,初始化一个对象时由constructor管理。销毁一个对象也是由两步骤完成,第一是销毁空间上的对象,第二是释放这块内存。
同时...
分类:
其他好文 时间:
2014-12-26 16:48:26
阅读次数:
119
为了防止内存泄露,养成检测内存分配/释放是否成功的良好习惯:
1,动态分配内存的时候检测是否分配成功,如果不成功请返回友好提示~
2,释放内存的时候将释放后的内存指针指向NULL,以保证不能被访问~
因为释放内存后,系统只是回收了指针所指的内存,此时指针是一个野指针本身仍是合法的,(只有有些类似void*的指针了),访问野指针程序当然出现异常~!
例子1:malloc()和free...
分类:
其他好文 时间:
2014-12-26 11:09:29
阅读次数:
143
安装
apt-get install valgrind
测试程序
#include
#include
int*Test(void)
{
int* x = malloc(10 * sizeof(int));
delete x;// problem 1: heap block overrun, problem 2: memory leak --x not free, ...
分类:
其他好文 时间:
2014-12-25 16:29:15
阅读次数:
118
1. 在IDE中查看Log信息当程序运行垃圾回收的时候,会打印一条Log信息,其格式如下:D/dalvikvm: , , , GC_Reason表示导致垃圾回收的原因以及当前的回收类型,包括以下几类: GC_CONCURRENT:当堆中对象数量达到一定是触发的垃圾收集 GC_FOR_MALLOC:....
分类:
移动开发 时间:
2014-12-23 12:15:30
阅读次数:
175
一、C语言中不定大小多维数组的处理:如果要给二维数组(m*n)分配空间,代码可以写成下面:char **a, i;// 先分配m个指针单元,注意是指针单元// 所以每个单元的大小是sizeof(char *)a = (char **)malloc(m * sizeof(char *));// 再分配...
分类:
其他好文 时间:
2014-12-23 01:32:20
阅读次数:
192
指针和引用的区别
指针指向一块内存,它的内容是指向内存的地址;引用是某内存的别名
引用使用是无需解引用,指针需解引用
引用不能为空,指针可以为空
引用在定义是被初始化一次,之后不可变;指针可变
程序为指针变量分配内存区域,而引用不需要分配内存区域
new和malloc的区别,free和delete的区别
malloc与free是C++/C语言的标准库函数,...
分类:
编程语言 时间:
2014-12-22 21:23:13
阅读次数:
203
对于一个C++的使用者来说,指针的使用可以算的上是家常便饭,但是在使用的过程中,很多时候可能会因为new或者malloc了一个对象,而忘记最后结束的时候去释放掉(我就会犯这样子的错误),从而导致内存泄露。而此时智能指针可能可以帮助我去解决这个问题。
智能指针(smart pointer)是利用个引用计数的策略去处理指针的释放,从而保证指针的安全性。通常情况下,我们会自己去设计一个智能指针类去管理...
分类:
编程语言 时间:
2014-12-21 16:40:36
阅读次数:
227
概述我实现了两个完全无锁的内存分配器:_nalloc 和 nalloc。 我用benchmark工具对它们进行了一组综合性测试,并比较了它们的指标值。与libc(glibc malloc)相比,第一个分配器测试结果很差,但是我从中学到了很多东西,然后我实现了第二个无锁分配器,随着核数增加至30,测试...
分类:
其他好文 时间:
2014-12-21 12:40:31
阅读次数:
241
内存一共4个区1.任何在函数内部声明的非static变量,其变量地址本身在栈区。栈是向低地址扩展的数据结构,即栈顶的地址和栈的最大容量是系统预先规定好的。2.任何全局变量或者静态局部变量,其变量地址本身在全局区3.任何指针变量如果用malloc,relloc,calloc,或者c++中的new,指针...
分类:
其他好文 时间:
2014-12-20 23:20:56
阅读次数:
235