Trick C-compiler将整个结构分配给零,没有for-loop

Orp*_*edo 0 c struct variable-assignment

我目前正在编写嵌入式操作系统的一小部分,我有时需要将大型结构中的所有变量分配给0.元素范围从uint8到uint64.到目前为止,我唯一能够工作的是循环遍历每种类型的变量,将每个变量分配给0,但这需要很多周期并且代码"丑陋".我在想是否有可能创建一个结构类型的指针,然后将指向的元素的值赋值为0,因为该元素应该具有sizeof(MyStruct)的大小?

要分配给0的结构:

struct AMD64Context{
uint8_t fp_context[512] __attribute__((alligned(16)));
uint64_t rax;
.... 
....
};
Run Code Online (Sandbox Code Playgroud)

Mat*_*lia 7

两种"经典"方法:

请注意,结果略有不同:在第一种情况下,您将所有内存粗暴地归零,这可以保证所有积分字段都为零,并且可能存在的任何填充也归零.对于FP值,标准不能保证归零(但是在任何"普通"平台上都是如此;同样,由于您正在编写OS,您肯定知道在您的平台上"全零"FP值实际上是零) .

第二个保证将字段归零,但如果它影响填充,则不指定.如果你对填充的值不感兴趣,你应该使用这个 - 它更简洁,对编译器来说更明显的是什么意图(所以它可以更好地优化它).

  • @Orpedo:什么样的环境没有'memcpy`? (3认同)
  • 写下你自己的memset - 这很容易. (2认同)