小编use*_*710的帖子

我为什么要使用std :: async?

我正在尝试深入探索新C++ 11标准的所有选项,同时使用std :: async并阅读其定义,我注意到两件事,至少在linux下使用gcc 4.8.1:

  • 它被称为异步,但它有一个真正的"顺序行为",基本上在你调用与异步函数foo相关的未来的行中,程序会阻塞,直到执行foo它完成.
  • 它取决于与其他人完全相同的外部库,以及更好的非阻塞解决方案,这意味着pthread,如果你想使用std::async你需要pthread.

在这一点上,我很自然地问为什么选择std :: async甚至是一组简单的仿函数?这是一个根本无法扩展的解决方案,您调用的未来越多,您的程序响应就越少.

我错过了什么吗?你能展示一个被授予以异步,非阻塞方式执行的例子吗?

c++ asynchronous future c++11 stdasync

65
推荐指数
3
解决办法
6万
查看次数

libcxxabi在linux下有意义吗?有什么好处?

我正在尝试确定libcxxabi在linux下的llvm项目中构建和使用是否有意义.

我的构建libcxxabi与之相关联

ldd libc++abi.so.1.0 
    linux-vdso.so.1 =>  (0x00007fff2e0db000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd658f0d000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fd658d05000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd65893c000)
    libc++.so.1 => /path/where/clang/is // edited
    /lib64/ld-linux-x86-64.so.2 (0x00007fd6593ab000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd658465000)
Run Code Online (Sandbox Code Playgroud)

所以它的使用gcc_s图书馆,GNU librt,唯一真正的区别在于它使用的事实libc++libstdc++,但如何好这真的是什么?

鉴于abi库的关键作用,我应该libcxxabi在这样的平台下去吗?

我的问题不在于如何建立这个,或者如果这样可行,但如果这是一个好主意C++ - 明智的,我可以获得什么样的好处,或者如果你已经使用这个有什么样的好处.

linux abi llvm clang libc++

38
推荐指数
1
解决办法
1382
查看次数

订购和分拣有什么区别?

不,这不是一个类的问题,我正在研究树和堆(部分排序的二叉树),我想知道如何正确定义这两个与通用数据结构相关的属性/动作.

c++ tree data-structures

23
推荐指数
3
解决办法
7473
查看次数

C++ 11标准是否保证std :: atomic <>是作为原子操作实现的?

我在一个交叉点,我试图在基于互斥锁的数据结构和无锁(可能无等待)的数据结构之间选择一个.

虽然挖掘得更深,但我没有发现C++ 11标准支持原子类型的原子操作这一事实,甚至对于基于宽度的积分也没有atomic_uint32_t.换句话说,它不仅仅是未被授予真正原子的std::atomic<>接口,唯一看起来它被赋予整个标准库中的原子的东西是.std::atomic_flag

这是真的还是我遗失了什么?这是什么原因?我的意思是标准称为"原子"的东西显然根本不是原子的,甚至允许使用互斥锁或阻止呼叫.

c++ multithreading atomic c++11

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

.p2align在asm代码中做了什么?

我调用.p2align了这个汇编指令,它是由gccC程序源生成的.

据我所知,对齐访问比未对齐访问更快,asm程序也不会自动对齐内存位置或优化内存访问,因此您必须这样做.

我真的无法读到这一点.p2align 4,,15,尤其是最后一部分15.

正如许多文档报道的那样,跳过明显gcc产生2 ,而不是1 的事实; 我得到的是这段asm内存以这样的方式对齐内存,即每个位置占用2 ^ 4位,这意味着16位,所以我认为WORD在这种情况下a 是16位长是公平的.

现在15可能意味着什么?这是多少比特?计数是从0这样开始的,"实际"数量是16而不是15?

编辑:

我只是将相同的C源转换为32位和64位asm代码,内存总是以相同的方式与同一指令对齐.p2align 4,,15.这是为什么 ?

assembly gcc

20
推荐指数
1
解决办法
9172
查看次数

CPUID的内在函数如信息?

考虑到我用C++编写代码,如果可能的话,我想使用类似内在函数的解决方案来阅读有关硬件的有用信息,我的顾虑/注意事项是:

  • 我不太了解汇编,只是获得这种信息是一项相当大的投资(尽管它看起来像CPU只是翻转值和读取寄存器.)
  • asm(英特尔和AT&T)至少有两种流行的语法,所以它是碎片化的
  • 奇怪的是,Intrinsics比asm代码更受欢迎和支持
  • 并非现在雷达中的所有编译器都支持内联asm,MSVC 64位是一个; 我担心我会发现其他类似的缺陷,同时深入研究我必须使用的不同编译器的功能集.
  • 考虑到这个交易,我认为对我来说更有效率的是它可以打赌Intrinsics,它应该比任何asm代码更容易.

我要回答的最后一个问题是:如何用内在函数做类似的事情?因为我没有找到除CPUID操作码以外的任何东西来获取这种信息.

c++ intrinsics cpuid

15
推荐指数
5
解决办法
7205
查看次数

我怎么应该在铿锵声中使用消毒杀菌剂?

我很抱歉,如果这是一个超级简单的概念,但我发现很难获得正确的心态,以便正确使用由提供的消毒剂clang.

float foo(float f) { return (f / 0); }
Run Code Online (Sandbox Code Playgroud)

我编译这个小片段

clang++ -fsanitize=float-divide-by-zero -std=c++11 -stdlib=libc++ -c source.cpp -o osan
Run Code Online (Sandbox Code Playgroud)

而且我还在不使用消毒剂的情况下编译了我的对象的"正常"版本

clang++ -std=c++11 -stdlib=libc++ -c source.cpp -o onorm
Run Code Online (Sandbox Code Playgroud)

我期待一些详细的输出,或者来自控制台的一些错误,但是在检查文件时nm我只发现了1个差异

nm o* --demangle

onorm:
0000000000000000 T foo(float)

osan:
                 U __ubsan_handle_divrem_overflow
0000000000000000 T foo(float)
Run Code Online (Sandbox Code Playgroud)

所以在清理版本中有一个未定义的符号,其名称类似于我在编译时使用的清洁剂; 但是一切都是"沉默的",而且从铿锵的前端根本没有输出.

我应该如何使用消毒剂以及什么是正确的工作流程?那个未定义的符号有什么意义?

c++ llvm clang sanitizer

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

为什么std :: ostream的构造函数受到保护?

为什么我不能像这样为我的输出创建一个"空"流

std::ostream out;
Run Code Online (Sandbox Code Playgroud)

此行是与两个明显违法clang 3.4,并gcc 4.8.1根据与Linux的libstdc++,我真的不知道为什么,我的意思是,为什么我不能只是出于创建流无处并使用它就像我想?请注意std::ofstream out;100%确定.我只是没有得到这背后的逻辑.如果你认为在创建之后我可以使用这个缓冲区并与其他缓冲区共享一个公共缓冲区,这就更奇怪了,copyfmt所以我没有真正需要std::ostream将对象初始化为对象的创建是有用的.

请不要偏离这一点,我不需要stringstreams,ios因为我必须做的事情以及他们提供的方法和属性,我需要流.

c++ iostream ostream

14
推荐指数
3
解决办法
2万
查看次数

适用于Linux的BlueStacks模拟器?

我在linux下,我需要一个运行Android并支持OpenGL ES的虚拟机,我知道BlueStacks在Windows和Mac下运行良好,我想知道Linux是否有类似的解决方案.

谢谢.

PS

我在Ubuntu 13.04 64位下

android opengl-es virtual-machine

13
推荐指数
1
解决办法
5万
查看次数

正确定义的union和reinterpret_cast之间有什么区别?

你能否提出至少1个情况,其中存在实质性差异

union {
T var_1;
U var_2;
}
Run Code Online (Sandbox Code Playgroud)

var_2 = reinterpret_cast<U> (var_1)
Run Code Online (Sandbox Code Playgroud)

我对此的想法越多,它们对我来说就越相同,至少从实际的角度来看.

我发现的一个区别是虽然联合大小在大小方面是最大的数据类型,但是这篇文章中描述的reinterpret_cast可能会导致截断,因此普通的旧式C式联合比新的更安全. C++铸造.

你能概述一下这两者之间的区别吗?

c++ unions reinterpret-cast

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