2014年7月29日 buddy分配算法
内核需要为分配一组连续的页框提供一种健壮、高效的分配策略。分配连续的页框必须解决内存管理中的外碎片(external fragmentation)。频繁的请求和释放不同大小的一组连续页框,必然导致分配页框的块分算来许多小块的空闲页框无法被一次性大量分配使用。
linux内核采用著名的伙伴系统算法来解决外碎片问题。该算法的核心思想是把所有的空闲页框分成1...
分类:
系统相关 时间:
2014-07-30 01:04:12
阅读次数:
378
C++中智能指针可以防止出现野指针、内存泄露等情况,智能指针的类中包含4个函数:构造函数、拷贝构造函数、重载复制操作符、析构函数。构造函数需要对引用计数和指针进行初始化,引用计数初始化为1,拷贝构造函数完成对象之间的拷贝,要注意引用计数的变化和判断两个指针是否指向相同的内存。重载复制操作符,需要判断的情况是左值代表的指针如果引用计数减为0,要释放相应的内存,避免发生内存泄露。析构函数中先判断引用计...
分类:
其他好文 时间:
2014-07-30 01:02:42
阅读次数:
199
相同:1,最后结果都是 释放不需要的空间,不同:assign(weak):直接赋值retain(strong):+1,引用一次 调用一次 retainrelease:-1copy:两个变量不共享内存,各有各的内存atomic:原子操作(多线程时使用)nonatomic:非原子操作@autorelea...
分类:
移动开发 时间:
2014-07-30 00:32:32
阅读次数:
397
对于共享资源,有一个很著名的设计模式:资源池(resource pool)。该模式正是为解决资源频繁分配、释放所造成的问题。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需要从缓冲池中取出一个了,使用完毕后再放回去。我们可以.....
分类:
数据库 时间:
2014-07-29 21:29:32
阅读次数:
368
char c[]="hello"
是局部数据。
char * c = "hello"
全局数据,在静态存储区域。
#include
/* 例子一 */
const char * strA()
{
/* 正确 通过static开辟一段静态存储空间 */
static char str[] = "hello";
/* 错误 分配一个局部数据,函数结束内存的栈释放
返回后的结果是不确定的且不安全,随时都有被回收的可能*/
char str[] = "hello";
...
分类:
其他好文 时间:
2014-07-29 15:15:38
阅读次数:
227
nginx进程间的通信
进程间消息传递
共享内存
共享内存还是Linux下提供的最基本的进程间通信方式,它通过mmap和shmget系统调用在内存中创建了一块连续的线性地址空间,而通过munmap或者shmdt系统调用可以释放这块内存。使用共享内存的好处是当多个进程使用同一块共享内存时,在任何一个进程修改了共享内存中的内容后,其他进程通过访问这段共享内存都能够得到修改后的内容。
Nginx...
分类:
其他好文 时间:
2014-07-29 14:28:38
阅读次数:
338
复位电路不论对FPGA还是对ASIC都是十分重要的,因为差的复位电路有可能引发不可重复的故障。
1 完全异步复位将引发的问题
完全异步复位在确立和释放时都是异步的,它可能使系统进入准稳态。
2 完全同步复位
3 异步确立和同步释放的电路将比完全同步或者异步的电路提供更可靠地复位。
代码如下
module reset(
input clk, rst_n,
...
分类:
其他好文 时间:
2014-07-29 13:05:16
阅读次数:
296
C++中的虚析构函数到底什么时候有用的,什么作用呢。总的来说虚析构函数是为了避免内存泄露,而且是当子类中会有指针成员变量时才会使用得到的。也就说虚析构函数使得在删除指向子类对象的基类指针时可以调用子类的析构函数达到释放子类中堆内存的目的,而防止内存泄露的。两段代码:#include using na...
分类:
编程语言 时间:
2014-07-29 12:23:26
阅读次数:
289
最近在改Away3D源码的时候遇到个很郁闷的问题,发现创建的Mesh 释放不掉。分析源码发现 EntityListItemPool 类中逻辑Bug在getItem()函数中发现_poolSize 对象池大小如果够用的情况下 它采用的方式是复用EntityListItem那么假设我删除了场景上有10个...
分类:
其他好文 时间:
2014-07-29 12:05:27
阅读次数:
225
1 char* vector_advance(char* val)大部分人都遇到过上面的函数,最大的问题就是资源由谁释放?再看一个函数1 char (&vector_advance(char (&var)[4]))[4]这个函数的意思是,vector_advance是函数名,接收一个包含4个元素的数...
分类:
其他好文 时间:
2014-07-29 11:28:06
阅读次数:
222