gpt4 book ai didi

c++ - 如何写入为结构保留的内存位置

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:25 24 4
gpt4 key购买 nike

我有一个结构:

struct foo{
uint8_t i1 : 4;
uint8_t i2 : 4;
uint8_t i3 : 4;
uint8_t i4 : 4;
}

现在,我有一个 16 位整数(称之为 a),我想将其写入该结构的内存位置,而无需执行以下操作:

foo1.i1 = (uint8_t)a>>12;
foo1.i2 = (uint8_t)a>>8;
foo1.i3 = (uint8_t)a>>4;
foo1.i4 = (uint8_t)a;

是否可以选择只将 16 位写入 foo1 的内存位置。像这样的东西:

*(*uint16_t)&foo1 = a;

最佳答案

首先,您应该确保这是您需要进行的优化 - 如果操作不当,您可能会遇到有关对齐、字节顺序等方面的问题。因此,您需要使用分析器检查代码性能并确定这是否是消耗大量处理器时间的领域之一。记住what Donald Knuth wrote :

Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.

一旦您确认这是一项有用的优化,那么您应该可以通过几种方式来进行优化。其中之一是使用 memcpy...

memcpy(&foo1, &a, sizeof(foo1));

或者,您可以使 foo1 成为一个带有 uint16_t 成员的 union 类型,然后写入该...

union {
struct foo f;
uint16_t u;
} foo1;
foo1.u = a;

关于c++ - 如何写入为结构保留的内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44145983/

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