秋招日记(三十四)又一个周日
学习记录
- 继续学习QT
秋招记录
- 被联想调剂岗位了
-
.NET开发工程师描述
-
C++开发工程师岗位描述
-
完全不一样的岗位,完全不一样的技术栈,后端能调去前端,无语
QString扩容策略
- 分享一下今天学到的神奇知识
- QString容器大小的增长实例
QString onlyLetters(const QString &in) { QString out; for (int j = 0; j < in.size(); ++j) { if (in[j].isLetter()) out += in[j]; } return out; }
- 通过每次添加一个字符来动态地构建字符串。假设向QString字符串添加15000个字符。然后,当QString耗尽空间时,会发生以下18个重新分配(可能的15000):4、8、12、16、20、52、116、244、500、1012、2036、4084、6132、8180、10228、12276、14324、16372。最后,QString分配了16372个Unicode字符,其中15000个被占用。
- 其中分配策略如下:
- 每次分配4个字符,直到20
- 20~4084,每次增长都翻倍,下一个2的幂,减去12
- 不使用2的幂是因为有的内存分配器在分配2的幂大小的内存时,性能最差,因为它会使用每个内存块的几个字节记录信息
- 4084以上,每次增加2048个字符位
- 一个物理分页的典型大小为4k,且现代处理器在分配缓冲区时,不会真正移动元素,而是将物理内存进行排序,增加分页大小数据有利于重新分配