c++14对内存分配性能的重大优化

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

Validate


你可能感兴趣的:(C++14)