可以在C中的指针参数上强制进行内存对齐吗?

cp.*_*ngr 5 c c++ memory-alignment c-preprocessor

我在C中有一个接受uint8_t *参数的函数,该参数必须指向32位对齐的内存。是否可以在C或C ++或任何特定平台的宏中为参数添加一些修饰,以使编译器或链接器在未按要求对齐时在构建时抛出错误?

这里的想法是我想保护该功能,以防止其他用户(或我六个月内)不当使用该功能。我知道如何对齐我想传递给它的东西。我想确保没有人可以将未对齐的内容传递给它。

基于此答案,我认为我的问题的答案为“否”,无法在构建时强制执行此操作,但这似乎是一个有用的功能,因此我想检查一下。我的解决方法是assert((((size_t)ptr) % 4) == 0);函数,以便至少在调试时可以在运行时捕获它。

根据我的经验,结果,如果你投了错位未定义uint8_t*uint32_t*许多嵌入式平台,所以我不想在“正确”的结果出来到底算。另外,这是在实时系统上使用的,因此放慢速度是不可接受的。

欢迎引用(如果有)。

And*_*nle 1

不,据我所知,C 或 C++ 标准中没有任何内容可以强制指针参数保持适当的值。

要获取内存,请使用posix_memalign

#include <stdlib.h>

int posix_memalign(void **memptr, size_t alignment, size_t size);
Run Code Online (Sandbox Code Playgroud)

描述

posix_memalign()函数应分配在对齐指定的边界上对齐的 size 字节,并应返回指向 memptr 中分配的内存的指针。对齐值应为 的两倍的幂sizeof(void *)

成功完成后,memptr 指向的值应为对齐的倍数。