问题标签 [compiler-explorer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
141 浏览

c++ - unique_ptr 没有在编译器资源管理器中生成删除指令?

我最近一直在玩Compiler Explorer。我加载了一个采用指针参数的示例,并将其更改为采用 unique_ptr 参数。但我注意到在输出程序集中,对 operator delete 的调用明显不存在。我很好奇是否有人知道为什么。

这是一个可以粘贴到资源管理器中的示例。一定要-O3输入编译器选项。


编辑:同样为了比较,如果我粘贴来自 cppreference 的代码示例之一,那么我在输出中得到 operator delete。


编辑:+1 给 krzaq。构造和销毁参数的是调用者,而不是被调用者。

0 投票
1 回答
1525 浏览

c++ - 使用 Godbolt 进入标准库调用

我想知道各种编译器是如何实现std::random_device的,所以我把它弹出到Godbolt中。

不幸的是,它唯一说的是

这不是很有帮助。我如何才能进入_M_getval()通话并检查那里的程序集?

0 投票
1 回答
97 浏览

c++ - 为什么编译器资源管理器上的 Visual Studio 会忽略异常模型设置?

当我尝试在Compiler Explorer 测试用例/EHs中使用该标志(以“启用”通过函数的异常)时,VC++ 19.22 似乎忽略了它,因为它仍然踢出 C5039 而实际上并未更改代码。extern "C"

我错过了什么?我忘记了另一个开关还是什么?

  • 基本情况命令行:/O1 /EHsc /Wall /wd4571
  • 测试用例命令行:/O1 /EHs /Wall /wd4571
0 投票
2 回答
877 浏览

c++ - #include of a HTTP URL in C++

I was looking at a random C++ example on Github ( https://github.com/Quuxplusone/coro/blob/master/examples/pythagorean_triples_generator.cpp ), and was surprised to see that it actually compiles ( https://coro.godbolt.org/z/JXTX4Y ).

Is this a new C++20 feature, or an extension on Godbolt, or something entirely else?

0 投票
1 回答
1875 浏览

c++ - 如何使用 Godbolt(编译器资源管理器)测试 C++ 模块?

为了询问或演示 C++20 中自写模块的错误/功能,能够使用Matt Godbolt 的编译器资源管理器会很棒。

例子:

test.cpp(模块测试):

编译clang++ -std=c++20 -stdlib=libc++ -fmodules -c -Xclang -emit-module-interface -o test.pcm test.cpp

主.cpp:

编译clang++ -std=c++20 -stdlib=libc++ -fmodules -fimplicit-modules -fimplicit-module-maps -fprebuilt-module-path=. main.cpp

问:有没有办法用编译器资源管理器做到这一点?

0 投票
1 回答
1075 浏览

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

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

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

虽然 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++ 库的简单函数的 MSVC asm 列表如此臃肿?

0 投票
1 回答
871 浏览

assembly - 如何在(发布)Rust 构建中找到我的函数的汇编代码?

Compiler Explorer似乎能够可靠地找到与函数对应的汇编代码。x86_64-unknown-linux-gnu假设一个工具链、一个常规(无属性)函数,并且没有额外的工具,我怎么能自己做到这一点cargo-asm

我知道要生成程序集,我可以使用rustc's --emit asmflag。有人可能认为找到函数就像在 .s 文件中搜索其名称一样容易,但我发现并非如此。

例如,.s 文件通常甚至没有提及函数名称,在这种情况下,添加#[inline(never)]到函数中会有所帮助。其次,找到带有函数名称的标签后,如何确定函数的结束位置?在我的测试箱中,我发现在更下方的指令中再次提到了函数名称.size——这可能标志着函数的结束吗?或者它可能是retq函数启动后的第一个?

假设这个目标是可以实现的,我希望学习:

  • 找到函数的开始和结束的最可靠方法是什么?
  • 获得合适的汇编文件的先决条件是什么?
0 投票
3 回答
2948 浏览

c++ - How to generate godbolt like clean assembly locally?

I want to generate clean assembly like Compiler Explorer locally. Note that, I read How to remove “noise” from GCC/clang assembly output? before attempting this. The output using that method isn't as clean or dense compared to godbolt and still has a lot of asm directives and unused labels in it.

How can I get clean assembly output without any unused labels or directives?

0 投票
0 回答
306 浏览

assembly - 编译器资源管理器中的调试信息

编译器资源管理器中的“调试部分”是什么?

这是编译器资源管理器内部使用的东西,或者这究竟显示了什么?我知道我可以通过过滤掉指令未使用的标签来摆脱它,但是这部分是什么?

这是一个示例:https ://godbolt.org/z/oozxKj 。

0 投票
1 回答
592 浏览

c++ - 可变长度数组的高性能“正确”C++ 替代方案

我正在编写一个需要在运行时创建数组的函数。该数组将很小,因此我不担心不安全的代码,但是,我想编写“正确”的代码。因此,我正在考虑三种选择:

  1. 字符数组[len];
  2. 字符数组 = 新字符(长度);
  3. 标准::向量数组(len);

使用Compiler Explorer将它们与 -O3 进行比较。结果是这样的:

  1. 12 条指令,0 次调用 new
  2. 21 条指令,1 次调用 new
  3. 118 条指令,2 次以上新的调用

我是否缺少对 std::vector<> 的优化,或者“正确”的 c++ 方式是否较慢,或者我完全错过了一种编码方式?

编辑:我忘了删除堆分配的数组

测试代码:

代码1:

代码2:

代码 3: