小编mam*_*sun的帖子

原子写入linux上的文件

有没有办法将缓冲区转储到文件原子?

"原子地"是指:如果有人在写作期间终止我的应用程序,我希望文件处于写入前或写入状态,但不是处于损坏的中间状态.

如果答案是"否",那么可能是用一个非常小的缓冲区来完成的?例如,我可以使用单个8字节fwrite(在x64平台上)转储2个后续的int32_t变量,并确保这两个int32都被转储,或者它们都没有,但不仅仅是其中一个?

c++ linux file file-writing

9
推荐指数
1
解决办法
1816
查看次数

SEGFAULT在-O3模式?

我将我的问题总结为以下简短程序.

它仅在-O3模式下导致SEGFAULT(-O2工作正常).根据gdb它发生*f = 0在线.

#include <iostream>

void func1(int s, int t)
{
        char* buffer = new char[s + t*sizeof(float)];
        if (!buffer)
        {
            std::cout << "new failed\n";
            return;
        }
        float* f = (float*)(buffer + s);
        for (int i = 0; i < t; ++i)
        {
            *f = 0;
            //std::cout << i << std::endl; // if uncomment this line everything will work fine
            ++f;
        }
        delete [] buffer;
        std::cout << "done\n";
}

int main()
{
        int s = …
Run Code Online (Sandbox Code Playgroud)

c++ optimization gcc segmentation-fault

6
推荐指数
1
解决办法
311
查看次数

我可以暂时为线程启用FTZ和DAZ浮点模式吗?

我想启用临时FTZ/ DAZ模式,以获得一些代码,其中严格遵守性能增益IEEE 754标准是不是一个问题,在不改变其他线程,它可以执行的代码,其中,遵守是重要的行为.

我一直在阅读关于如何启用/禁用这些模式和对非规格化处理对性能的影响,但不幸的是我有在多线程环境下的混合代码,我不能让这些模式一劳永逸.

我的理解是,由于MXCSR寄存器的标志决定了硬件的行为,并且由于每个线程都有自己的寄存器上下文,因此设置这些标志只会影响当前线程的行为.

这是对的吗?

floating-point x86 multithreading sse nan

3
推荐指数
1
解决办法
384
查看次数