相关疑难解决方法(0)

未初始化的局部变量是最快的随机数发生器吗?

我知道未初始化的局部变量是未定义的行为(UB),并且该值可能具有可能影响进一步操作的陷阱表示,但有时我想仅使用随机数进行可视化表示,并且不会在其他部分使用它们.例如,程序在视觉效果中设置具有随机颜色的东西,例如:

void updateEffect(){
    for(int i=0;i<1000;i++){
        int r;
        int g;
        int b;
        star[i].setColor(r%255,g%255,b%255);
        bool isVisible;
        star[i].setVisible(isVisible);
    }
}
Run Code Online (Sandbox Code Playgroud)

是不是比它快

void updateEffect(){
    for(int i=0;i<1000;i++){
        star[i].setColor(rand()%255,rand()%255,rand()%255);
        star[i].setVisible(rand()%2==0?true:false);
    }
}
Run Code Online (Sandbox Code Playgroud)

并且还比其他随机数发生器更快?

c c++ undefined-behavior garbage

319
推荐指数
16
解决办法
2万
查看次数

为什么内核代码不能使用Red Zone

强烈建议在创建64位内核(对于x86_64平台)时,指示编译器不要使用用户空间ABI所执行的128字节红区.(对于GCC,编译器标志是-mno-red-zone).

如果启用了内核,则内核不会是中断安全的.

但那是为什么呢?

x86-64 abi red-zone

18
推荐指数
3
解决办法
2874
查看次数

中断处理程序使用哪个堆栈 - Linux

在多任务系统中,当任何硬件产生对特定CPU的中断时,CPU可以执行以下任一情况,除非它已经在服务ISR:

  1. 用户模式进程正在CPU上执行
  2. 内核模式进程正在CPU上执行

想了解上述两种情况下中断处理程序使用哪个堆栈,为什么?

linux stack linux-kernel interrupt-handling top-halves

5
推荐指数
1
解决办法
8816
查看次数