- 博客(6)
- 资源 (8)
- 收藏
- 关注
原创 千万注意,不要 hack std::string
前段时间被一个bug折磨了两个星期,最后发现竟然是如此一个陷阱——我为了减少内存用量并且减少一次内存拷贝,直接通过string.data()修改了string的内部表示。这与其说是一个陷阱,不如说是我自己给自己造了一个陷阱然后把自己给掉进去了。发病机制可以用如下代码简单的勾画出来:using namespace std; int main(int argc, char* argv[])
2007-02-25 14:49:00 1609
千万注意,不要 hack std::string
前段时间被一个bug折磨了两个星期,最后发现竟然是如此一个陷阱——我为了减少内存用量并且减少一次内存拷贝,直接通过string.data()修改了string的内部表示。这与其说是一个陷阱,不如说是我自己给自己造了一个陷阱然后把自己给掉进去了。发病机制可以用如下代码简单的勾画出来:using namespace std; int main(int ar...
2007-02-25 14:49:00 146
原创 前缀压缩词典
包含多个固定索引,一个可变索引,固定索引使用一个内存池和一个数组保存项目在内存中的偏移,并且使用前缀压缩,使用空间最小(每个词条4个字节的索引空间) 可变索引不压缩,并且可以动态插入词条,占用空间较大(每个词条20个字节的索引空间)存储 1000 万个词,占用内存 100M 左右,平均每个词10个字节(包括了字符串空间和索引空间)。接口采用 stl 容器的风格
2007-02-09 22:34:00 2427
前缀压缩词典
包含多个固定索引,一个可变索引,固定索引使用一个内存池和一个数组保存项目在内存中的偏移,并且使用前缀压缩,使用空间最小(每个词条4个字节的索引空间) 可变索引不压缩,并且可以动态插入词条,占用空间较大(每个词条20个字节的索引空间)存储 1000 万个词,占用内存 100M 左右,平均每个词10个字节(包括了字符串空间和索引空间)。接口采用 stl 容器...
2007-02-09 22:34:00 132
原创 cpu 的 cache 是很宝贵的——从互相平行的数组看
以前一直想不通,为什么在有些系统中,要把同一个数据结构的不同字段放入 多个互相平行的数组中,而不是放入一个结构中。典型的如Windows PE 可执行文件的导入表,有 IAT (导入地址表)和 INT(导入名字表),这两个表就放在两个互相平行的数组中,而按照我们的第一感觉,好像这样的设计纯粹是玩弄我们的大脑,没有任何别的益处。其实仔细想想,这样的益处是很大的,在Windows 从 INT 载入
2007-02-09 22:25:00 2021
cpu 的 cache 是很宝贵的——从互相平行的数组看
以前一直想不通,为什么在有些系统中,要把同一个数据结构的不同字段放入 多个互相平行的数组中,而不是放入一个结构中。典型的如Windows PE 可执行文件的导入表,有 IAT (导入地址表)和 INT(导入名字表),这两个表就放在两个互相平行的数组中,而按照我们的第一感觉,好像这样的设计纯粹是玩弄我们的大脑,没有任何别的益处。其实仔细想想,这样的益处是很大的,在Windows 从 INT 载入 ...
2007-02-09 22:25:00 104
febird C++ 库(附带所有源码)
2009-04-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人