gpt4 book ai didi

c++ - 可以在 C 中强制对指针参数进行内存对齐吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:51 26 4
gpt4 key购买 nike

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

这里的想法是我想保护该功能免受其他用户(或我在 6 个月内)的不当使用。我知道如何对齐我想传递给它的东西。我想确保没有人可以将错位的东西传递给它。

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

根据我的经验,如果在许多嵌入式平台上将未对齐的 uint8_t* 转换为 uint32_t*,结果是不确定的,所以我不想指望“正确”的结果最终出来了。此外,这是在实时系统上使用的,因此减速可能是 Not Acceptable 。

欢迎引用,如果有的话。

最佳答案

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

要获取内存,请使用 posix_memalign :

#include <stdlib.h>

int posix_memalign(void **memptr, size_t alignment, size_t size);

DESCRIPTION

The posix_memalign() function shall allocate size bytes aligned on a boundary specified by alignment, and shall return a pointer to the allocated memory in memptr. The value of alignment shall be a power of two multiple of sizeof(void *).

Upon successful completion, the value pointed to by memptr shall be a multiple of alignment.

关于c++ - 可以在 C 中强制对指针参数进行内存对齐吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41897917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com