小编log*_*led的帖子

已弃用标头<codecvt>替换

一点前景:我的任务需要将UTF-8 XML文件转换为UTF-16(当然还有正确的标题).所以我搜索了将UTF-8转换为UTF-16的常用方法,并发现应该使用来自的模板<codecvt>.

但现在当它被弃用时,我想知道执行相同任务的新常用方法是什么?

(根本不介意使用Boost,但除此之外我更喜欢尽可能靠近标准库.)

c++ utf-8 utf-16 codecvt c++17

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

避免使用内联asm优化远离变量

我正在阅读预防编译器优化,同时描述Chandler Carruths 如何clobber()escape()来自 CppCon 2015:Chandler Carruth"调优C++:基准测试,CPU和编译器!哦我的!".影响编译器.

从阅读那里,我假设如果我有一个输入约束,如"g"(val),那么编译器将无法优化val.但是在g()下面,没有生成代码.为什么?

如何doNotOptimize()重写以确保生成代码g()

template <typename T>
void doNotOptimize(T const& val) {
  asm volatile("" : : "g"(val) : "memory");
}

void f() {
  char x = 1;
  doNotOptimize(&x);    // x is NOT optimized away
}

void g() {
  char x = 1;
  doNotOptimize(x);     // x is optimized away
}
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/g/Ndd56K

c++ assembly inline-assembly performance-testing compiler-optimization

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

PE二进制文件中的部分名称确实有限制吗?

一个真棒文章约PE格式规定如下:

名称。每个节标题都有一个名称字段,长度最多八个字符,对于第一个字符必须为一个句点。

但是我知道一些违反此规则的示例,从.gnu_debuglink二进制文件内的部分开始,这些示例以DWARF格式分离了调试符号。另外侏儒的.debug_arranges.debug_info以及其他违反本。(为了进行比较,PDB的“分离”部分名称仅为.debug。)

因此,我想知道本文是否只是过时/不完整,或者这是Windows特定的准则,还是对节名称长度没有任何限制?

如果有人给我指向任何有关PE / COFF二进制的书(ELF也会很棒),并且甚至比在线文章更全面,我也会很高兴。或关于系统编程的一般知识-有关此主题的信息非常稀缺或已过20年了。:)

assembly byte header portable-executable sections

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