gpt4 book ai didi

c - 使用类型双关将对象分解为单词

转载 作者:行者123 更新时间:2023-12-05 01:26:14 25 4
gpt4 key购买 nike

查看以下代码,该代码将对象分解为单词,以便使用仅接受单词的 API 将(单词对齐的)对象写入内存:

void func(some_type obj /*obj is word aligned*/, unsigned int size_of_obj_in_words)
{
union punning{
unsigned char bytes[4]; /* assume 4 bytes in word in my system */
uint32_t word;
};
union punning pun;
unsigned char *legal_aliasing_by_char_pointer;
for (int i=0; i < size_of_obj_in_words; i++)
{
for (int j=0; j<4; j++)
{
legal_aliasing_by_char_pointer = (unsigned char *)&obj + j + i*4;
pun.byte[j] = *legal_aliasing_by_char_pointer;
}
/* finally, using word aliasing to decompose object to words */
/* endianity is not important */
write_word_to_hw_by_word(pun.word)
}
}

我正在尝试以符合 c 标准的方式执行它,以便不会违反严格的别名规则。该代码是否实现了该目标?

最佳答案

看起来不错,但你可以简化很多:

void func(some_type obj)
{
uint32_t word;

for (int i=0; i < sizeof obj / sizeof word; i++)
{
memcpy(&word, (char *)&obj + i * sizeof word, sizeof word);
write_word(word);
}
}

obj 的对齐并不重要。此外,您不需要传递大小,因为 sizeof 可以完成这项工作。

我怀疑如果您更改函数以接受对象的地址,它会执行得更好,在这种情况下您可能还想传递一个数组长度。

关于c - 使用类型双关将对象分解为单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57457095/

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