相关疑难解决方法(0)

C++ 11中COW std :: string实现的合法性

据我所知,写时复制不是std::string在C++ 11中实现符合性的可行方法,但最近在讨论中我发现自己无法直接支持该语句.

我是否正确C++ 11不承认基于COW的实现std::string

如果是这样,这个限制是否在新标准(其中)的某处明确说明了?

或者这个限制是否暗示,因为新要求的综合影响std::string排除了基于COW的实施std::string.在这种情况下,我会对"C++ 11有效禁止基于COW的std::string实现" 的章节和样式推导感兴趣.

c++ string stdstring copy-on-write c++11

114
推荐指数
5
解决办法
2万
查看次数

什么是写时复制?

我想知道什么是copy-on-write是什么以及它用于什么?Sun JDK教程中多次提到术语"写时复制数组",但我不明白它的含义.

copy-on-write data-structures

108
推荐指数
5
解决办法
8万
查看次数

你如何找到linux机器上安装的libstdc ++库的版本?

我找到了以下命令:strings /usr/lib/libstdc++.so.6 | grep GLIBC这里开始.它似乎工作,但这是一个ad-hoc /启发式方法.

是否有可用于查询C++库版本的特定命令?或者我找到了接受方法的方法?

c++ linux shared-libraries

62
推荐指数
4
解决办法
11万
查看次数

为什么使用std :: mutex的函数会对pthread_key_create的地址进行空检查?

采用这个简单的函数,在由std::mutex以下实现的锁定下递增整数:

#include <mutex>

std::mutex m;

void inc(int& i) {
    std::unique_lock<std::mutex> lock(m);
    i++;
}
Run Code Online (Sandbox Code Playgroud)

我希望这(在内联之后)以直接的方式编译,然后调用m.lock()增量.im.unlock()

检查生成的程序集的最新版本的gccclang,但是,我们看到一个额外的并发症.gcc首先考虑版本:

inc(int&):
  mov eax, OFFSET FLAT:__gthrw___pthread_key_create(unsigned int*, void (*)(void*))
  test rax, rax
  je .L2
  push rbx
  mov rbx, rdi
  mov edi, OFFSET FLAT:m
  call __gthrw_pthread_mutex_lock(pthread_mutex_t*)
  test eax, eax
  jne .L10
  add DWORD PTR [rbx], 1
  mov edi, OFFSET FLAT:m
  pop rbx
  jmp __gthrw_pthread_mutex_unlock(pthread_mutex_t*)
.L2:
  add DWORD PTR [rdi], 1
  ret
.L10:
  mov edi, eax …
Run Code Online (Sandbox Code Playgroud)

c++ gcc pthreads clang stdmutex

8
推荐指数
1
解决办法
609
查看次数

(如何)我可以在Centos/RHEL上使用带有devtoolset-7的新C++ 11 ABI吗?

我的目标是在Centos 7上使用gcc 7.2(和clang 6)构建与Centos 7目标兼容的可执行文件,而不安装devtoolset,但*使用较新的C++ ABI*.

较新的ABI修复了lib中的一些缺陷,这些缺陷在没有ABI更改的情况下无法修复.例如list :: size O(1)Vs O(n),字符串没有COW.

我猜测为什么在以下问题中可能无法实现这一点. -D_GLIBCXX_USE_CXX11_ABI = 1对CentOS 7上的devtoolset-7无效

c++ c++11 devtoolset centos7 software-collections

8
推荐指数
1
解决办法
1891
查看次数