- 主题:aligned_allocator到底做了什么?
这几天调试bug,发现使用std::vector<int,aligned_allocator<int>> var,运行后结果是对的,但是使用std::vector<int> var,运行结果就是错的,请问aligned_allocator起了什么作用?google了半天也没发现具体解释。
--
FROM 114.246.150.*
你好,对齐的内存地址怎么理解?vector本身就是连续内存,int又是32bit,我不太理解还需要怎么对齐。
【 在 z16166 的大作中提到: 】
: 可以单步跟进去看的。
: 顾名思义,就是返回对齐的内存地址。有些API或者OS机制需要提供对齐的地址,不然就会返回失败。
: 通常是调用编译器提供的intrinsic函数。或者多分配一点内存,在分配的这段内存中从头开始找到对齐的那个地址,返回那个地址即可。
: ...................
--
FROM 114.246.150.*
看明白了,多谢
【 在 z16166 的大作中提到: 】
: 比如,有些操作需要页面对齐,假如内存页面大小是4096字节,那么传递给API(或者说成传给os/硬件)的buffer首地址必须是4096的整数倍。这就是内存地址对齐。
:
--
FROM 114.246.150.*
谢谢,看懂了。
【 在 hoodlum 的大作中提到: 】
: 就是返回的地址的值的 低 x bits 都是 0,这就叫对齐。
: 比如 DWORD-aligned, 就是说,地址值能被 4 整除。
: 某些 cpu 指令,对地址的对齐有要求。
: ...................
--
FROM 114.246.150.*
CPU和FPGA之间数据传输的数组,一般情况下应该遇不到。
【 在 one4all4one 的大作中提到: 】
: 好奇什么环境下需要考虑这个?为什么我平时写代码没注意vector<int>还有这种坑
--
FROM 114.246.150.*
差不多,把cpu数据给fpga加速
【 在 one4all4one 的大作中提到: 】
: 多谢。我的确没用过。你这是并行计算吗?高级货
--
FROM 123.120.140.*