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)
两种"经典"方法:
memset
AMD64Contex context;
memset(&context, 0, sizeof(context));
Run Code Online (Sandbox Code Playgroud)初始化 {0}
AMD64Contex context={0};
Run Code Online (Sandbox Code Playgroud)请注意,结果略有不同:在第一种情况下,您将所有内存粗暴地归零,这可以保证所有积分字段都为零,并且可能存在的任何填充也归零.对于FP值,标准不能保证归零(但是在任何"普通"平台上都是如此;同样,由于您正在编写OS,您肯定知道在您的平台上"全零"FP值实际上是零) .
第二个保证将字段归零,但如果它影响填充,则不指定.如果你对填充的值不感兴趣,你应该使用这个 - 它更简洁,对编译器来说更明显的是什么意图(所以它可以更好地优化它).