问题标签 [gcc4.8]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Gnu C++ 4.8 thread_local 实现背后的机制是什么,确切的“运行时惩罚”是什么?
gcc 4.8.0 添加了 thread_local
来自 C++11 标准的实现。更改状态可能存在“运行时惩罚” :
G++ 现在实现了 C++11
thread_local
关键字;[...]不幸的是,这种支持需要对在不同翻译单元中定义的非函数局部thread_local
变量的引用进行运行时惩罚,即使它们不需要动态初始化,[...]。如果程序员可以确定在非定义 TU 中没有使用变量需要触发动态初始化(或者因为变量是静态初始化的,或者在定义 TU 中的变量的使用将在另一个使用之前执行) TU),他们可以使用 -fno-extern-tls-init 选项避免这种开销。
谁能向我解释 G++ 对thread_local
全局变量的作用?
- 一般机制是什么?
- 是什么导致了开销?
- 每次访问涉及多少开销?指针间接?昂贵的锁?
- 究竟在什么情况下没有开销?
从更改说明中,我假设例如这不会产生开销:
因为data
在同一个翻译单元?
worker
如果并且data
在不同的翻译单元中,这将如何变化?这是一个例子吗?
现在使用data
inworker
会产生开销吗?还是这样,即使它是start
开始的worker
?
gcc - 在 windows 7 x64 中安装和使用 GCC
我是 GCC 的新手,对此了解不多。我想将它安装在我的 Windows 7 64 位 PC 上,并将其用于 C、C++ 和 Java。最新版本是 GCC-4.8.0。在他们的镜像链接中,我可以选择下载gcc 4.8.0.tar.bz2和gcc 4.8.0.tar.gz和md5.sum。请指导我,我应该如何继续使用 GCC
build - 构建 gcc-4.8
我正在尝试在 64 位 Fedora 17 服务器上编译 gcc/g++ 4.8。我正在配置构建过程
然后我运行make。构建块会持续一段时间,然后在找不到 crti.o 时失败。我注意到失败之前的编译步骤使用 -m32 选项,这意味着正在为 32 位架构执行编译。当我搜索 crti.o 时,我在 /usr/lib64 路径中找到它,而不是在 /usr/lib 路径中,它通常用于 32 位。我只想编译 64 位,这就是为什么我在配置中包含了 with-cpu 参数。显然,这还不够。
我需要在配置中包含哪些参数,以便仅对源代码进行 64 位编译,并且仅链接 64 位系统库和类似文件?
c++ - __int128 error when compiling 32 bit
When I'm compiling a 32 bit program, the above is the error I get. I'm using http://sourceforge.net/projects/mingwbuilds/
Why? My code compiled fine with 4.7.2 but I wanted to update to 4.8 for the bug fixes and it gets rid of the 0 used as null value for pointer warnings when there are no zeros.
Many of the bug fixes I want. It compiles my x64 ones just fine on Windows.
Is there a way to get it to compile x32 applications?
gcc4.8 - “make check”找不到已安装的共享库
安装 gcc 4.8,我使用推荐的基础设施库来减少可能的问题。
使用默认设置构建并安装 gmp--> 共享库到 /usr/local/lib 构建 isl,但 make check 找不到已安装的 gmp 共享库。无论如何安装了isl,共享库去了/usr/local/lib。构建了 clog,但 make check 也找不到安装的 isl 或 gmp 共享库
所以我进入 cloog-0.18.0/.libs/ 并建立了到 /usr/local/lib/libisl.so.10.1.1 和 libgmp.so.3 的软链接并重新运行 make check 没有任何失败。
这些是从 gcc ftp 服务器下载的推荐基础结构 tarball,并使用默认配置构建和安装。为什么“make check”可能找不到它刚刚安装的共享库?
应该补充:这是一个新的 Ubuntu 安装
c++ - 从优先级队列中获取 unique_ptr
我正在维护一组unique_ptr
实例priority_queue
。在某些时候,我想获取第一个元素并将其从队列中删除。但是,这总是会产生编译器错误。请参阅下面的示例代码。
这会产生以下编译器错误(gcc 4.8.0):
更改要queue
在此问题中使用的代码可以解决问题,并且代码编译得很好。
有没有办法将unique_ptr
s 保留在 a 中,priority_queue
或者我错过了什么?
macos - QT Creator 添加 -Xarch
我正在使用带有旧 GCC 的 QT Creator,现在我更新到 4.8 版本。但是 QT Creator 添加了 -Xarch_x86_64 选项,GCC 4.8 告诉我
有没有办法删除这个选项?我试着用
但到目前为止,什么都没有发生。
注意:我使用的是最新的 QT Creator 版本,使用 Port 下载了 GCC,并且我更改了套件上的编译器。
问候
gcc - 在 Debian、libc6 上升级到 gcc-4.8 后 g++ 链接器错误
我刚刚对 Debian Weezy 机器进行了 dist 升级,以便从 gcc-4.7 运行 gcc-4.8。以前的构建环境是健全的,并且可以正常编译。现在它给出了以下链接器错误,任何程序(甚至是一个微不足道的 hello world):
我确定这是与 libc6 相关的简单事情,但我看不到什么?看到这个错误我很惊讶,因为我假设 dpkg 会处理任何依赖项,所以我不确定这个特定系统是否有问题或 debian 包有问题(这似乎不太可能,因为似乎没有其他人有这个问题!)
有任何想法吗?:)
loops - GCC Graphite - 4.8 循环优化
我正在开发一个 C++ 模拟框架。在当前版本中,我发现了两个瓶颈。第一个是随机数生成,第二个(引发这个问题)是使用高度迭代的过程(heavy for loops
)。
你们中的一些人可以给我关于 gcc 4.8 关于循环优化的反馈吗?
我已经阅读了一些关于这个主题的可用文献,但是,也许你可以对我说得更清楚(用更简单的词),我可以从这个早期版本中得到什么。
一个叫什么loop normalization
,例如......或者它与多核架构有什么关系......
此外,优化选项的背后是什么:
-ftree-loop-optimize 在树上执行循环优化。默认情况下,此标志在 -O 或更高版本中启用。
-ftree-loop-linear 在树上执行循环交换转换。与 -floop-interchange 相同。要使用此代码转换,GCC 必须配置 --with-ppl 和 --with-cloog 以启用 Graphite 循环转换基础结构。
-floop-interchange 对循环执行循环交换转换。交换两个嵌套循环会切换内部和外部循环。
那里有任何代码优化和/或编译器专家吗?非常感谢。
注意:我目前在 Debian 4.7.2、gcc 4.7 下工作
c++11 - 使用thread_local时gcc 4.8.1中的内存泄漏?
Valgrind 在以下代码中报告泄漏的块,显然每个线程一个:
编译器版本:
GCC 构建选项:
程序编译选项:
valgrind 版本:
Valgrind 选项:
valgrind 输出的尾部:
构造函数和析构函数为每个线程运行一次:
笔记:
- 如果更改创建的线程数,则泄漏块数与线程数匹配。
- 如果 GCC 是这样实现的,那么代码的结构可能允许资源重用(即泄露的块)。
- 从 valgrind 堆栈跟踪中,thread_local.cc:34 是以下行:
thread_local Foo foo;
- 由于 sleep_for() 调用,程序运行大约需要 10 秒左右。
知道这个内存泄漏是在 GCC 中,是我的配置选项的结果,还是我的程序中的一些错误?