如果对奇数地址上的存储器进行 16 位访问,dsPic30/33 和 18E/F 部件将产生存储器故障。使用malloc()分配堆内存时,返回地址是否保证字对齐? (即偶数)
您可能还记得,malloc 采用字节为单位的参数,而不是单词。
我找到的文档(16 位语言工具库引用手册 50001456J.pdf)对这个问题没有提及。
====
编辑:我应该补充一点,我只从 malloc() 收到过偶数(字对齐)地址,所以到目前为止一切都运行良好。尽管如此,如果我得到一个奇怪的地址,我的代码将导致陷阱(因为我确实执行了诸如 ((uint16_t *)foo)[3] = 20000;
之类的事情)。因此,我想确保 malloc() 始终返回偶数地址。
最佳答案
C 标准要求 malloc() 必须返回满足任何内存的指针 实现对任何适合分配的对象施加的对齐要求。如果编译器以一种无论对齐如何都可以工作的方式处理所有内存访问,则 malloc() 实现可以返回任意对齐的指针。即使所需的对齐不是那么粗略,许多实现实际上也会返回按 2、4 或 8 字节的倍数对齐的指针,因为它避免了处理小于该值的可用空间区域,但除非实现明确 promise 人们不应期望这种行为不会改变。
关于pic - Microchip XC16 下的 malloc() 是否保证产生字对齐地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39007226/