C++内存池实现
什么是内存池
(Memory Pool)是一种内存分配方式。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。使用该技术的优点是重用现有的内存块,以便减少系统调用的时间。
为什么使用内存池
主要有两点:
- 缩短的程序分配内存的时间
- 避免内存碎片
Scale invariant feature transform (SIFT) 是在1999年由 UBC 的教授 David Lowe 首次提出,并在2004年进一步完善并发表的 影像特征点检测 (detector) 和描述算子 (descriptor)。SIFT的诞生是计算机视觉里程碑式的进步,它使得 homography estimation, structure from motion, epipolar geometry 以及 机器人 (robotics) 中的SLAM 有了飞跃式的改进,正是因为SIFT好于在它之前的任何描述子, 使得匹配更加准确。SIFT不只是在geometry上有应用, 它后来广泛应用于目标识别 (Object Recognition)(见后文)。
ctags是vim下方便代码阅读的工具,以便支持代码跳转。在sublime text中也支持该插件。
1.$ ctags –R * ($为Linux系统Shell提示符,这个命令上面已经有所介绍)
2.$ vi –t tag (请把tag替换为您欲查找的变量或函数名)
3.:ts(ts助记字:tagslist, “:”开头的命令为VI中命令行模式命令)
4.:tp(tp助记字:tagspreview)—-此命令不常用,可以不用记
5.:tn(tn助记字:tagsnext) —-此命令不常用,可以不用记
6.Ctrl+ ]跳到光标所在函数或者结构体的定义处
7.Ctrl+ T返回查找或跳转
1.Ctrl + ` 打开sublime text命令行。输入下面代码,自动完成Package Control安装。1
import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp) if not os.path.exists(ipp) else None;open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())
2.Ctrl + Shitf + P 打开Package Control,输入ctag,确认自动完成安装。
3.在你的源代码目录下输入命令1之后,目录底下会生成.tags文件。然后就可以通过命令自动实现函数跳转了。
内存分配方式有3种:
1. `char* get_string()` 2. `{` 3. ` char* p = new char[10];` //堆内存 4. ` strcpy(p,"hello");` 5. ` return p;` 6. `}` 7. `
1. `//实现interactorstyle类` 2. `class MyVtkInteractorStyle : public vtkInteractorStyleTrackballCamera` 3. `{` 4. `public:` 5. ` static MyVtkInteractorStyle *New();` 6. ` vtkTypeMacro(MyVtkInteractorStyle, vtkInteractorStyleTrackballCamera);` 7. ` ...` 8. ` virtual void OnMouseMove();` 9. ` virtual void OnLeftButtonDown();` 10. ` virtual void OnLeftButtonUp();` 11. ` ...` 12. `};`