小编Kar*_*ška的帖子

运行时的Vtable修改

对于那些使用vtables的编译器实现:是否有任何在运行时更改虚函数表的情况?或者vtable仅在编译时填充,并且在运行时不执行任何操作来修改它们?

c++ vtable

13
推荐指数
1
解决办法
971
查看次数

ARM Cortex-M异常入口和堆栈框架

ARM Cortex-M内核文档说,在执行异常条目堆栈框架时.这导致寄存器R0,R1,R2,R3,R12,LR,PC,xPSR被推到当前堆栈上.我的问题是为什么这种方式只推动那些寄存器而不是所有的上下文?例如,如果某些数据位于R5寄存器中,则异常处理程序使用该寄存器时将覆盖该数据.

异常处理程序本身的编译函数会推送一些寄存器(以及所有其他常规函数,因为异常处理函数没有区别),但经过大量调试后我发现事实并非总是如此,因为不同的变体寄存器被推送然后恢复.

arm exception-handling cpu-architecture cortex-m

4
推荐指数
1
解决办法
576
查看次数

自动存储持续时间struct初始化

其中一些可能是重复的,但我很抱歉.
假设我有这个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标准参考都非常感谢!谢谢!

c struct initialization language-lawyer automatic-storage

4
推荐指数
1
解决办法
183
查看次数