我有以下代码:
#include <iostream>
#include <random>
int main() {
std::mt19937_64 rng(std::random_device{}());
std::cout << std::uniform_int_distribution<>(0, 100)(rng) << '\n';
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用valgrind它来描述它,但它说:
vex amd64->IR: unhandled instruction bytes: 0xF 0xC7 0xF0 0x89 0x6 0xF 0x42 0xC1
vex amd64->IR: REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
vex amd64->IR: VEX=0 VEX.L=0 VEX.nVVVV=0x0 ESC=0F
vex amd64->IR: PFX.66=0 PFX.F2=0 PFX.F3=0
==2092== valgrind: Unrecognised instruction at address 0x4cdc1b5.
==2092== at 0x4CDC1B5:std::(anonymous namespace)::__x86_rdrand() (random.cc:69)
==2092== by 0x4CDC321: std::random_device::_M_getval() (random.cc:130)
==2092== by 0x4009D4: main (random.h:1619)
Run Code Online (Sandbox Code Playgroud)
在多个实例之前:
--2092-- WARNING: Serious error when reading …Run Code Online (Sandbox Code Playgroud) 最近,我开始使用带有g ++ 5.3.1的Ubuntu 16.04并检查我的程序运行速度慢了3倍.在此之前我使用过Ubuntu 14.04,g ++ 4.8.4.我使用相同的命令构建它:CFLAGS = -std=c++11 -Wall -O3.
我的程序包含循环,充满数学调用(sin,cos,exp).你可以在这里找到它.
我尝试使用不同的优化标志(O0,O1,O2,O3,Ofast)进行编译,但在所有情况下都会重现问题(使用Ofast,两种变体运行速度更快,但第一次运行速度仍然慢3倍).
在我使用的程序中libtinyxml-dev,libgslcblas.但是它们在两种情况下都具有相同的版本,并且在性能方面没有在程序中(根据代码和callgrind概要分析)占用任何重要部分.
我已经进行了分析,但它并没有让我知道它为什么会发生.
Kcachegrind比较(左边比较慢).我只注意到现在程序使用与Ubuntu 14.04 libm-2.23相比libm-2.19.
我的处理器是i7-5820,Haswell.
我不知道为什么它会变慢.你有什么想法?
PS下面你可以找到最耗时的功能:
void InclinedSum::prepare3D()
{
double buf1, buf2;
double sum_prev1 = 0.0, sum_prev2 = 0.0;
int break_idx1, break_idx2;
int arr_idx;
for(int seg_idx = 0; seg_idx < props->K; seg_idx++)
{
const Point& r = well->segs[seg_idx].r_bhp;
for(int k = 0; k < props->K; k++)
{
arr_idx = seg_idx * …Run Code Online (Sandbox Code Playgroud) 我使用的是Ubuntu 16.04.5和GCC 5.4.0版.
我在玩sizeof()操作员,写下面的代码:
#include <stdio.h>
int main(int argc, char *argv[]){
long int mylint = 31331313131.1313;
printf("size of long int is %d\n", sizeof(mylint));
printf("size of long int is %d\n", sizeof(long int));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用gcc -o ... ...命令编译并期待:
size of long int is 8
size of long int is 8
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
fl_double_lint.c: In function ‘main’:
fl_double_lint.c:11:9: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("size of long …Run Code Online (Sandbox Code Playgroud) 我想在Ubuntu上试验新的GCC 5.1 C++编译器.
如何在Ubuntu上安装GCC 5.1?
我更喜欢某种形式的预构建可执行文件,我可以下载和安装,而不是下载GCC的源代码并从中构建整个GCC 5.1.
此外,由于我在GCC 5中读到了libstdc ++的ABI更改,因此必须在GCC 5.1中安装新版本的libstdc ++吗?
GCC 5.3增加了一个新选项: -fno-semantic-interposition
新的-fno-semantic-interposition选项可用于提高共享库的代码质量,其中不允许插入导出的符号.
这听起来像是对C++项目有用的东西,其中插入不能用于任何原因,但延迟是一个问题.
但是,描述相当模糊.有人能够澄清这个选项是如何工作的吗?
在使用中,double fma(double x, double y, double z);我希望d下面标有的输出行中有一个非零值'?'.它似乎在内部只使用long double精度,而不是无限精度的规定.
的
fma函数计算(x×y)+z,四舍五入一个三元操作:它们计算的值(仿佛)到无限精度和圆一次的结果的格式,根据当前的舍入模式.§7.12.13.12(我的重点)
那我的fma()坏了,或者我在代码或编译选项中如何错误地使用它?
#include <float.h>
#include <math.h>
#include <stdio.h>
int main(void) {
// Invoking: Cygwin C Compiler
// gcc -std=c11 -O0 -g3 -pedantic -Wall -Wextra -Wconversion -c -fmessage-length=0
// -v -MMD -MP -MF"x.d" -MT"x.o" -o "x.o" "../x.c"
printf("FLT_EVAL_METHOD %d\n", FLT_EVAL_METHOD);
for (unsigned i = 20; i < 55; i++) …Run Code Online (Sandbox Code Playgroud) 我是C-Headers的新手- stdint.h和inttypes.h。我正在尝试一些代码以了解uint8_t工作原理。但是,似乎遇到了问题。
我已经声明了4 uint8_t个分别具有边界值0、255、256,-1的整数,并对其执行了一些简单的算术运算。我这样做是因为我想知道C编译器(我在Linux上使用)会产生什么错误/警告gcc 5.4.0。如果不是这样的话,我很想知道输出是什么样子。下面给出的代码。
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
int main() {
int a = 10;
printf("%d\n", a++);
printf("%d\n\n", a);
// 8 bit unsigned integer -> range[0, 255]
uint8_t ua81=0, ua82=255, ua83=256, ua84=-1;
printf("--------STDINT.H----uint8_t--DEMO--------\nua81 = %" PRIu8 "\n", ua81);
printf("ua82 = %" PRIu8 "\nua83 = %" PRIu8 "\nua84 = %" PRIu8 "\n\n", ua82, ua83, ua84);
printf("ua81+1 = %" PRIu8 "\nua82-3 = %" PRIu8 "\nua83-4+7 = %" PRIu8 …Run Code Online (Sandbox Code Playgroud) 我尝试使用ubuntu 15.10存储库版本的libmuparser(包libmuparser2v5).用gcc编译工作正常,但不能用clang编译.我深入研究了这个问题,提出了以下最小(非)工作示例和几个问题.
考虑一个带有一个简单类的库,它接受一个string并返回一个string.
testlib.h:
#pragma once
#include <string>
struct Test {
std::string str;
void set(std::string s);
std::string get();
};
Run Code Online (Sandbox Code Playgroud)
testlib.cpp:
#include "testlib.h"
void Test::set(std::string s) {
str = s;
}
std::string Test::get() {
return str;
}
Run Code Online (Sandbox Code Playgroud)
这是用gcc 5.2.1编译为静态库的
g++ -Wall -c testlib.cpp -o testlib-gcc.o
ar rcs libtest-gcc.a testlib-gcc.o
Run Code Online (Sandbox Code Playgroud)
现在编译一个应用程序 main.cpp
#include <iostream>
#include "testlib.h"
int main()
{
Test p;
p.set("Hello!");
std::cout << p.get() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
用clang 3.6.2-1使用
clang++ main.cpp -o out-clang …Run Code Online (Sandbox Code Playgroud) 我想用Ubuntu 16.04从github构建Facebook的Proxygen c ++ http库.这是我设置的环境以及用于安装依赖项的deps.sh命令:
gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.1) 5.4.0 20160609
export CPPFLAGS="-std=c++14"
export CXXFLAGS="-std=c++14"
git clone git@github.com:facebook/proxygen.git
cd proxygen/proxygen && ./deps.sh
Run Code Online (Sandbox Code Playgroud)
这通过构建其愚蠢的依赖关系得到了我的大部分,但我得到了一个不完整的类型错误:
libtool: compile: g++ -DHAVE_CONFIG_H -I./.. -pthread -I/usr/include -std=c++14 -std=gnu++1y -std=c++14 -MT io/async/AsyncPipe.lo -MD -MP -MF io/async/.deps/AsyncPipe.Tpo -c io/async/AsyncPipe.cpp -fPIC -DPIC -o io/async/.libs/AsyncPipe.o
In file included from /usr/include/c++/5/bits/move.h:57:0,
from /usr/include/c++/5/bits/stl_pair.h:59,
from /usr/include/c++/5/utility:70,
from /usr/include/c++/5/algorithm:60,
from ./../folly/Conv.h:26,
from Conv.cpp:16:
/usr/include/c++/5/type_traits: In instantiation of ‘struct std::make_unsigned<__int128>’:
Conv.cpp:528:52: required from ‘folly::detail::ConversionResult<T> folly::detail::digits_to(const char*, const char*) [with Tgt = __int128]’
Conv.cpp:658:16: …Run Code Online (Sandbox Code Playgroud)