对于那些使用vtables的编译器实现:是否有任何在运行时更改虚函数表的情况?或者vtable仅在编译时填充,并且在运行时不执行任何操作来修改它们?
ARM Cortex-M内核文档说,在执行异常条目堆栈框架时.这导致寄存器R0,R1,R2,R3,R12,LR,PC,xPSR被推到当前堆栈上.我的问题是为什么这种方式只推动那些寄存器而不是所有的上下文?例如,如果某些数据位于R5寄存器中,则异常处理程序使用该寄存器时将覆盖该数据.
异常处理程序本身的编译函数会推送一些寄存器(以及所有其他常规函数,因为异常处理函数没有区别),但经过大量调试后我发现事实并非总是如此,因为不同的变体寄存器被推送然后恢复.
其中一些可能是重复的,但我很抱歉.
假设我有这个struct
:
struct foo
{
int a;
int b;
int c;
};
Run Code Online (Sandbox Code Playgroud)
1.如果struct foo
类型对象以具有自动存储持续时间且没有初始化程序的方式声明,是否可以保证将其所有成员强制初始化为零?
{
// other stuff
struct foo bar;
// other stuff
}
Run Code Online (Sandbox Code Playgroud)
2.如果struct foo
类型对象以具有自动存储持续时间的方式声明并且具有一些初始值设定项,是否可以保证未明确初始化的成员将被强制初始化为零?
{
// other stuff
struct foo bar = {.a = 1};
// other stuff
}
Run Code Online (Sandbox Code Playgroud)
3.如果struct foo
以具有自动存储持续时间的方式声明类型对象并使用复合文字表达式,是否可以保证未明确初始化的成员将被强制初始化为零?
{
// other stuff
func((struct foo){.a = 1});
// other stuff
}
Run Code Online (Sandbox Code Playgroud)
任何C标准参考都非常感谢!谢谢!