Nebula中的StringAtom
来源:互联网 发布:万达 知乎 编辑:程序博客网 时间:2024/06/06 14:06
N3中很多类的Name都用StringAtom类型的字符。StringAtom类中只有一个成员变量Content,其实就是一个const char *类型的指针,指向一个字符串。StringAtom类之间比较只需要进行指针间地址比较即可,两个content相同的StringAtom必定是表示相同的字符串。而StringAtom的大小也可以简单的比较地址的大小,速度比通常用字符串比较要快的多。
StringAtom类型的变量代表一个特定的字符串,而这个字符串在整个程序空间中只保存一份,只有初始赋值的需要几个比较操作及分配内存动作,以后的各种操作因为都不需要重新分配空间。StringAtom对象之间的比较赋值等速度都非常快,但是StringAtom与String或const Char *等类型的变量之间作比较或转化时速度会很慢。
StringAtom类的实现原理如下:
每个StringAtom类都包含一个Content变量,指向它所包含的字符串地址。
一个新的StringAtom被初始化或赋值时,如果右操作数也是个StringAtom对象,直接将Content的值赋值即可,否则的话必须到全局的字符串表中去查找是否存在这个字符串,如果存在的话返回地址,否则的话新分配一块地址,并返回该地址。
系统中有两个StringAtom缓冲表,真正的字符串内存存放在全局的StringAtom表中的StringBuffer对象中,而本地线程的StringAtom只作为一个缓冲区,保存了本地线程用到的一些字符串指针,因为每次访问Global StringTable的时候都需要Lock一下,会影响速度,所以本地线程保存了一个Local StringTable。
- Nebula中的StringAtom
- Nebula中的智能指针
- Nebula中的RefCount类
- Nebula
- nebula 0
- Nebula level00
- Nebula level01
- Nebula level02
- Nebula level04
- Nebula level03
- Nebula level05
- Nebula level06
- Nebula level07
- Nebula level08
- Nebula level09
- Nebula level10
- Nebula level11
- Nebula level12
- 寻找银线(一)
- string Format相关
- 如何写出性能优良的SQL
- Linux系统安装之一: 硬盘安装Ubuntu 8.04
- 配置文件读取
- Nebula中的StringAtom
- 用Vim模仿IDE的一些常用功能
- MFC实现透明窗口
- [转]《英特尔多核/多线程技术》
- SDL入门学习之三.加载BMP图片,实现动画
- 创建线程两种方式的比较
- 天上飞仙
- VC usb编程从0开始.
- Ubuntu下千千静听Audacious的安装步骤详解