初识英特尔线程构建模块之内存管理tbb_malloc

作者: NickYang 分类: 技术文章,程序开发 发布时间: 2013-01-27 21:01
什么是TBB?

TBB(Thread Building Blocks)是英特尔发布的一个库,全称为 Threading Building Blocks,里面包含了 Algorithms、Containers、Memory Allocation、Synchronization、Timing、Task Scheduling这六个模块。暂时我只用到了Memory Allocation模块,其他的没有用到。

摘自百度百科:
TBB,Thread Building Blocks,线程构建模块,是Intel公司开发的并行编程开发的工具。
OSCON 上,Intel 宣布,Threading Building Blocks,Intel 众多软件开发工具中的一个,open source 了。协议是 GPLv2。
TBB 获得过 17 届 Jolt Productivity Awards,是一套 C++ 模板库,和直接利用 OS API 写程序的 raw thread 比,在并行编程方面提供了适当的抽象,当然还包括更多其他内容,比如 task 概念,常用算法的成熟实现,自动负载均衡特 性还有不绑定 CPU 数量的灵活的可扩展性等等。STL 之父,Alexander Stepanov 对此评价不错,他说“Threading Building Blocks… could become a basis for the concurrency dimension of the C++ standard library”。其他 TBB 的早期用户,包括 Autodesk,Sun,Red Hat, Turbo Linux 等亦然。现在 O’Reilly 已经出版了一本 Intel Threading Building Blocks: Outfitting C++ for Multi-core Processor Parallelism。
使用tbb_malloc有什么好处?

tbb_malloc是完全符合STL Allocator标准,完全可以作为STL中各种容器的内存适配器。纯纯的C++ style,各位cpper用起来想来应该会很舒服。

如何使用tbb_malloc?

tbb_malloc提供了多种申请内存的类以便使用的不同的场合,具体请查看官方文档。我们主要来看下tbb::cache_aligned_allocator< T >。

以上封装的使用方法如下:

当然了,你还可以直接用来作为容器的默认内存适配器,例如:

还可以将其改造成内存池,使用一个字节的char作为模板参数即可,如下: