我正在为我们的项目审查其他人的 C++ 代码,该项目使用 MPI 进行高性能计算(10^5 - 10^6 核)。该代码旨在允许(可能)不同架构上的不同机器之间进行通信。他写了一条评论,内容大致如下:
我们通常使用
new
anddelete
,但在这里我使用malloc
andfree
。这是必要的,因为某些编译器在new
使用时会以不同的方式填充数据,从而导致在不同平台之间传输数据时出错。这不会发生在malloc
.
这不符合我从标准new
与malloc
问题中了解到的任何内容。
new/delete 和 malloc/free 有什么区别?暗示编译器可以不同方式计算对象大小的想法(但为什么这与使用不同sizeof
?)。
malloc &placement new vs. new是一个相当流行的问题,但只讨论在不new
使用构造函数的地方使用构造函数malloc
,这与此无关。
malloc 是如何理解对齐的?说内存可以保证与我之前的想法正确new
对齐malloc
。
我的猜测是他在过去的某个时候误诊了自己的错误并推断出new
并malloc
给出了不同数量的填充,我认为这可能不是真的。但我无法通过谷歌或之前的任何问题找到答案。
帮助我,StackOverflow,你是我唯一的希望!