pic - Microchip XC16 下的 malloc() 是否保证产生字对齐地址?

标签 pic microchip xc16

如果对奇数地址上的存储器进行 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/

相关文章:

c - C 中的 PIC - 按钮不起作用

c - 如何从 C 程序中调用汇编函数?

c - mplab xc8/16 builtin_constant_p

c - MPLAB XC16 : Mixing C and Assembly

embedded - 如何使用_small_代码空间减少十六进制ASCII字符转换的代码空间?

C18 : Representation of LONG and FLOAT constants in code

assembly - 学习 PIC 单片机的汇编语言的最佳资源是什么

c - 图片 18F45K42 : How to combine 4 bytes to Int?

c - 如何使这个 for 循环使 LED 变暗和变亮?

c - 海湾合作委员会错误 "<variable> causes a section type conflict"