小编Flo*_*wly的帖子

为什么 MSVC C++ 编译器将一个简单的 Hello World 扩展为 4000 行汇编代码?

最近,我正在深入优化我的 C++ 代码,因此开始尝试使用编译器资源管理器。由于我主要使用 Visual Studio 在 Windows 上进行开发,因此我使用了 msvc 编译器。

在某些时候 msvc 失控了。经过一番摆弄之后,我可以将其缩小到 iostream 标头,这应该是 I/O ( SL.io.3 ) 的首选。

#include <iostream>
int main() {
    std::cout << "Hello World!\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

而 gcc 或 clang 的总输出(main + 一个调用一些ios_baseinit 函数的静态初始化器)总共有大约 20 行汇编代码(在 Godbolt 编译器浏览器过滤掉指令和注释之后)。
MSVC 将其分解为 4000。这些行中的大多数是单独的函数;MSVC 对main自身的定义是 7 条指令,而 gcc/clang 则是 8 条指令。(使用 GNU/Linux 的 gcc/clanglibstdc++将额外长度的 arg 传递给 cout 运算符重载函数,而不是像 MSVC 在使用自己的 C++ 库时那样只传递 2 个指针。)

如果我使用类似的东西puts,MSVC 的总输出相当紧凑,可与 gcc/clang 相媲美,就像 …

c++ assembly visual-studio visual-c++ compiler-explorer

12
推荐指数
1
解决办法
776
查看次数

debian apt 找不到 openjdk-8-jdk

我尝试按照此处的建议使用以下命令安装 openjdk-8-jdk :

sudo apt-get install openjdk-8-jdk
Run Code Online (Sandbox Code Playgroud)

但找不到该包。我确实在packages.debian.org上手动找到了它,并尝试告诉apt也从那里加载,按照该包的镜像页面上的建议,通过将以下行添加到/etc/apt/sources.list

deb http://ftp.de.debian.org/debian sid main
Run Code Online (Sandbox Code Playgroud)

但 apt 仍然找不到该包。我也尝试改变

  • 网址http://deb.debian.org/debian
  • sid 到buster 或buster-backports
  • 主要是不稳定、非自由、贡献(或其中部分或全部的列表)
  • 上述所有的组合

还是没有运气。

java linux debian apt openjdk-8

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