我正在审查使用MPI进行高性能计算(10 ^ 5-10 ^ 6内核)的项目的其他人的C ++代码。该代码旨在允许(可能)不同体系结构上的不同机器之间进行通信。他写了一条评论,内容大致如下:
我们通常使用
new
和delete
,但是在这里我使用malloc
和free
。这是必要的,因为某些编译器在new
使用时会以不同的方式填充数据,从而导致在不同平台之间传输数据时出错。不会发生这种情况malloc
。
这与我从标准new
vs malloc
问题中了解到的任何内容都不符。
new / delete和malloc / free有什么区别?这暗示了编译器可以对对象的大小进行不同的计算(但是,为什么这与使用sizeof
?有所不同)。
malloc和placement new vs. new是一个相当受欢迎的问题,但仅涉及new
在malloc
不使用构造函数的情况下的使用,与此无关。
malloc如何理解对齐方式?说,保证内存可以正确地与任一new
或malloc
这是我以前认为的。
我的猜测是,他在过去的某个时候误诊了自己的错误,并推断出该错误new
并malloc
进行了不同程度的填充,我认为这可能是不正确的。但我找不到Google或其他任何问题的答案。
帮我,StackOverflow,您是我唯一的希望!
malloc
和之间可能有所不同new
,因为new
在某些环境中分配一个块,将一些数据添加到开头,并在该数据之后立即返回指向某个位置的指针。(我同意其他人,在数据块内,malloc
并且new
必须使用相同的填充。)