|
发表于 2011-12-31 13:36:10
|
显示全部楼层
还有一种更高级的动态内存分配就是, 你不需要自己去归还你申请的内存, 在你不需要使用的时候, 系统就会自动处理,
就好像你有个助理一样, 你要管的只是申请空间, 你不需要那部分空间的时候你的助理会帮你归还那部分
这种方式对指针做了进一步的封装(好像是叫句柄吧...handle?), 可以大大的减少程序员的错误和负担, 不过代价就是牺牲了代码的效率, 不过总体上来讲, 性能会有所提高
这种方式的好处不仅仅再于减少出错,
比如说, 系统现在有6块空闲的空间
||||||||||||||||||||||||||||||||
|| || || || || || ||
|| 1 || 2 || 3 || 4 || 5 || 6 ||
|| || || || || || ||
||||||||||||||||||||||||||||||||
可能会在某个时刻 第1 , 第3 , 第5块已经分别被借给3个人了
如果这个时候又有一个人要申请一个大小为2块连续的空间, 这个时候就需要系统对这些分配的空间重新整理(似乎是叫垃圾收集)
腾出一个大小为2块的连续空间给那个人
如果每个人手上拿到的是被分配的空间的绝对地址(指针), 那个系统是没办法重新整理的
但是, 如果如果每个人手上拿的只是一个系统给的标识(句柄), 你要访问那部分空间的时候, 要先用这个标识(通过某种方法, 实现方式被封装起来了, 用户是不需要知道的) 找到地址, 再进行访问. 如果是这种方式, 系统可以在整理空间的时候, 重新把你手上的标识映射到一个新的空间.
有些编程语言是没有指针的, 差不多就是这个道理
我的理解就是这样, 建议去看算法和数据结构的书籍, C/C++只不过是编程语言, 工具而已, 核心还是在算法和数据结构上 |
|