Table of Contents
- 1. 本质需求
- 2. 存在的问题
- 3. 解决方案
简述, C++14标准对内存优化的描述修改, 会让编译器引入类似TCMalloc的内存分配优化策略, 而不拘泥于原来的有一个new语句,就分配一次内存的傻傻的情况. 因此有理由相信用C++14的编译器编译出来的c++程序在内存分配上性能会有较多提升. 下面的文字来源于clang编译器提供的文档, 我对其主要内容进行了意译. 个人感觉是, 不再需要引入TCMalloc库来帮助提升性能, 直接使用c++14就行了.
1 本质需求
需要优化内存分配和回收
- 内存的分配和回收已经成为现代系统很重要的成本.
- 区分内存分配优化和调用优化
- 好的系统性能需要对应用的动态行为适配不同的分配策略, 或者根据应用提供的线索采用不同的分配策略.
2 存在的问题
- 当前C/C++标准可能会导致
- 分配策略只考虑与new/delete语句顺序有关的事情, 而忽略其他重要的有助于优化的信息
- 分配策略只考虑为每一句new语句执行分配内存的调用语句,而忽略分配的优化
3 解决方案
建议修改标准文档的措辞,使得更加准确的聚焦在本质需求上, 使得某些编译器和内存分配器已经支持的优化行为得到体现,比如TCMalloc.
- 在某些情况下, 内存分配函数的调用次数在程序中不能被观察到. 这样允许实现者可以减少调用的次数(通过避免调用或者合并调用)
- 避免调用或者合并调用所分配的空间不会超过代码中new语句要求分配的, 只有一种例外,就是为了适应内存对齐要求而需要用额外的内存填补缝隙.
此建议不适用于class-specific 内存分配器
- 建议标准中直接说明实现要遵守data-race free规则, 参考data-race free来历 和 data-race free原理
Author: dean
Created: 2015-12-27 日 16:17
时间: 2024-10-08 12:08:31