当在DLL或.so中调用函数时,当编译器使用对齐和填充进行自己的结构布局时,为什么传递结构是可靠的?
c 语言结构中的 AFAIK 会按照编译器认为合适的方式进行布局、对齐和填充。这就是为什么你不能依赖一个 c 程序来使用来自另一个 c 程序的结构。例如,您不能将结构另存为另一个 c 程序将读取并转换为同一个结构的二进制文件。您也许可以使用这样的打包结构,但这并不是一个很好的做法。
所以我很惊讶地发现 .so 和 DLL 文件具有将复杂结构(其引用)作为参数的 c 函数。至少我公司的产品是这样做的。这是可靠的,这是好的做法吗?是否有一些大小、对齐和填充都相同的结构布局的新标准?
我知道 64 位程序不能调用 32 位库,但我仍然认为结构布局可能因相同位的编译器而异。
THE END
二维码