小编Tom*_*err的帖子

std :: mutex会创建一个围栏​​吗?

如果我锁定std::mutex遗嘱,我总会得到一个记忆围栏?我不确定它是暗示还是强迫你获得围栏.

更新:

根据RMF的评论发现此参考文献.

多线程编程和内存可见性

c++ multithreading mutex memory-model memory-barriers

29
推荐指数
2
解决办法
3717
查看次数

编译空文件是否遵循C++标准?

1994年的Obfuscated C比赛中有一个参赛作品,是最小的quine.它只是一个空文件.

C++规范中是否有允许编译空文件的东西?如果没有,"有效程序"的最低要求是什么?我依稀记得在某处读到有一个特殊情况,其中一个空文件在C++规范中被赋予了默认实现,但我找不到引用.

我试过这个,虽然我不知道它一定有说服力.

$ rm main_empty.cpp
rm: cannot remove `main_empty.cpp': No such file or directory
$ touch main_empty.cpp
$ g++ -o empty main_empty.cpp
/usr/lib/gcc/.../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

有点溺爱,你可以绕过失踪的主要.

$ g++ -Wl,--defsym=_start=_exit -Wl,--undefined=_exit \
    -nostartfiles -static -o empty main_empty.cpp
Run Code Online (Sandbox Code Playgroud)

更新:

有人指出,这main_empty.cpp是多余的.如果从命令中删除它,它将编译相同的内容.

我添加了一些静态垃圾,main_empty.cpp以查看它是否表现在不同的行为,它没有.但确实改变了可执行文件的大小.

#include <iostream>

struct Foo {
    Foo() {
        std::cout << "hi" << std::endl;
    }
} foo;
Run Code Online (Sandbox Code Playgroud)

如果你添加一个main文件,并正常编译它将按照你所期望的典型静态加载输出.

c++

7
推荐指数
1
解决办法
1439
查看次数