小编Joh*_*don的帖子

什么是std :: condition_variable和std :: condition_variable_any之间的区别?

我可能失去了一些东西很明显,但我看不到之间有什么区别std::condition_variablestd::condition_variable_any.为什么我们两个都需要?

c++ std condition-variable c++11

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

如何使用autotools在64位平台上创建32位共享库

我正在使用autotools构建我的系统,主要由一个库组成.在64位Red Hat平台上,我需要能够生成一个能够在32位Red Hat平台上运行的库.

当我添加-m32到编译行时,一切都可以正常生成一个static(.a)库,但是一旦我尝试创建一个共享库,我就会得到这样的错误:

/usr/bin/ld: warning: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtbeginS.o' is incompatible with i386 output  
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtbeginS.o: In function `__do_global_dtors_aux':  
crtstuff.c:(.text+0x29): undefined reference to `__DTOR_END__'  
collect2: ld returned 1 exit status' 
Run Code Online (Sandbox Code Playgroud)

我可以看到的问题是,它包括64位对象文件出来的/ usr/lib64下,而不是正确的32位的了/ usr/lib目录的(他们有正常的),但我无法弄清楚如何要解决这个问题.

autotools shared-libraries

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

编程cuda内核时的整数大小

我似乎无法在Cuda编程指南中找到这个简单问题的答案:用nvcc编译内核时,short,int,long和long long声明了什么大小的整数?它是否依赖于我的主机架构,所以我应该使用int16_t,int32_t和int64_t,还是总是固定大小?

cuda

15
推荐指数
1
解决办法
8737
查看次数

与-static链接时的Valgrind错误 - 为什么?

我有一个测试驱动程序链接到我写的库.该库使用autotools,因此它生成存档(.a文件)和动态库(.so).

当我用"g ++ -static"链接我的驱动程序时,可能会链接到.a,valgrind会反复抱怨"有条件的跳转或移动取决于未初始化的值".第一次失败发生在__pthread_initialize_minimal中的main之前.

当我没有静态链接,可能与.so链接时,我没有得到任何valgrind投诉.

有谁知道为什么?valgrind不适用于-static吗?

更新:我甚至无法发布我的驱动程序的简化版本,因为它链接到一个我无法削减的非常大的库,但我注意到所有程序中最简单的

int main()
{
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

与-static链接并从valgrind运行时出错:

==15449== Use of uninitialised value of size 8
==15449==    at 0x40B0F3: exit (in /home/jdgordo/src/t)
Run Code Online (Sandbox Code Playgroud)

我应该包括我在64位Redhat 5.5上运行.

c++ valgrind

9
推荐指数
1
解决办法
3066
查看次数

为什么不隐式调用模板化函数的运算符转换?(C++)

我有以下代码:

template <class T>
struct pointer
{
  operator pointer<const T>() const;
};


void f(pointer<const float>);

template <typename U>
void tf(pointer<const U>);

void g()
{
  pointer<float> ptr;
  f(ptr);
  tf(ptr);
}
Run Code Online (Sandbox Code Playgroud)

当我用gcc 4.3.3编译代码时,我得到一个message(aaa.cc:17: error: no matching function for call to ‘tf(pointer<float>&)’),指示编译器调用'operator pointer<const T>'了非模板化函数f(),但没有用于模板化函数tf().为什么并且有没有解决方法没有使用const和非const版本重载tf()?

在此先感谢您的帮助.

c++ templates implicit

7
推荐指数
1
解决办法
207
查看次数

算法尽可能地考虑几个因素

是否有一个已知算法将整数分解为尽可能少的因素(不一定是素数),其中每个因子都小于某个给定的常数N?

我不关心质数因子大于N的数字.而且,我不处理大于几百万的数字,并且因子分解是处理初始化的一部分,所以我并不特别担心计算复杂性.

编辑:只是为了清楚.我已经有代码找到了主要因素.我正在寻找一种方法,将这些因素结合到尽可能少的复合因子中,同时保持每个因子小于N.

algorithm

6
推荐指数
1
解决办法
178
查看次数

我可以在cuda卡上实际分配多少内存

我正在编写一个服务器进程,使用cuda在GPU上执行计算.我想排队进来的请求,直到设备上有足够的内存来运行作业,但是我很难确定我可以在设备上分配多少内存.我对工作需要多少内存有一个非常好的估计(至少从cudaMalloc()分配多少),但是在我分配了可用的全局内存总量之前很久就让设备内存不足.

是否有一些公式王从全局总记忆中计算出我可以分配的金额?我可以玩它,直到我得到一个经验有效的估计,但我担心我的客户会在某些时候部署不同的卡,我的偷工减料的数字不会很好.

cuda

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

我可以编写const表达式double,它是两个小于-0.5的ulps

我根据通过json数据包收到的数字进行了一组浮点计算.在我的计算结束时,我要求其中一个数字> = -0.5.我发现有时我的测试值不合格,因为它是一个低于阈值的ULP.无论如何要写一个意味着类似的东西

constexpr auto threshold = -0.5 - 2*ULP;
Run Code Online (Sandbox Code Playgroud)

或者我必须采取类似的方式

auto threshold = -0.5;
threshold = std::nexttoward(threshold, -2.0);
threshold = std::nexttoward(threshold, -2.0);
Run Code Online (Sandbox Code Playgroud)

c++ floating-point floating-accuracy

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

编译器选择错误的运算符<<

我有两个库,其中一个依赖于另一个.第一个库定义了一些枚举,并提供了一个运算符<<(),它为每个枚举打印一小段文本.我有单元测试证明这是有效的.

第二个库依赖于第一个库,它将枚举值传递给std :: cout(std :: ostringstream表现相同)并获取相应的数值而不是文本.不涉及模板化代码,因此它不是模板vs过载问题.我查看了预处理器输出,以验证正确的定义是否可见.我正在使用g ++ 4.1.2.

我无法在我的库之外重现问题(数千行),所以我不能发布任何示例代码.我尝试生成示例代码也让我相信我理解这应该如何工作.我猜测其中一个标题中包含的内容会导致编译器在选择要使用的运算符<<时做出不同的选择.

我的问题:如何深入了解编译器在选择使用哪个版本的运算符以及为什么选择标准版本的选择时所具有的选择.

编辑:按要求添加签名:请注意,此简化示例不会出现问题.

来自第一个图书馆的标题:

namespace utcp {
  enum GainType {AGC_GAIN_MODE, MAN_GAIN_MODE };
}

// I've tried this passing the argument by value as well.
inline std::ostream& operator<<(std::ostream &os, const hdr::GainType &val)
{...}
Run Code Online (Sandbox Code Playgroud)

第二个图书馆的代码

std::cout << "Gain Text: " << hdr::AGC_GAIN_MODE << std::endl;
Run Code Online (Sandbox Code Playgroud)

c++ g++

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

如何编写适用于矢量或映射迭代器的自定义算法

我想编写自己的算法(只是一个真正的函数),它需要一系列迭代器.如果迭代器来自映射,我想使用数据(迭代器 - >第二)值.如果迭代器像向量或列表一样"正常",我只想使用解除引用的迭代器值.

c++ stl map

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