gcc相关内容
我在寻找快速code为64位(无符号)立方根。 (我使用C和用gcc编译,但我想大多数人会是语言和编译器无关的。工作需要的),我将通过ULONG 64位unisgned整数表示。 给定输入n个I所需要的(积分)返回值r为使得 R * R *为r = N&放大器;&安培; N'LT; (R + 1)*(R + 1)*(R + 1) 这就是我想要n的立方根,四舍五入。基本code像收益率(U
..
我不知道是否有一个GCC宏,会告诉我的Linux内核版本,所以我可以适当地设置变量类型。如果没有,我怎么会去定义我自己的宏,这是否? 解决方案 在的linux / version.h中文件中有一个名为宏 KERNEL_VERSION 这将让你检查你想要的版本,针对当前的Linux版本的头( LINUX_VERSION_ code )安装。例如,要检查当前Linux头对内核的 v2.6.16
..
考虑以下两种方案,在两种不同的方式执行相同的计算: // v1.c #包括LT&;&stdio.h中GT; #包括LT&;&math.h中GT; 诠释主要(无效){ INT I,J; INT nbr_values = 8192; INT n_iter = 100000; 浮X; 为(J = 0; J< nbr_values; J ++){
..
我最近遇到了很多的功能,用GCC产生在x86非常糟糕code。他们都适合的模式: 如果(some_condition){ / *做很简单的东西,并返回* / }其他{ / *的东西复杂,需要大量的寄存器* / } 想简单的情况下如此之小,工作的一半以上都花在推动和弹出不会在所有修改寄存器东西。如果我手写了ASM,我会保存和恢复保存-跨调用寄存器中的复杂情况下的内部,避免在简单
..
我与谁在使用旧版本的GCC(3.2.3是precise),但想要升级客户端和一个已经给出绊脚石升级到新版本的原因之一是工作的差异在类型的大小则float_t 其中,果然是正确的: 在GCC 3.2.3 的sizeof(则float_t)= 12 的sizeof(浮动)= 4 的sizeof(DOUBLE_T)= 12 的sizeof(双)= 8 在GCC 4.1.2 的sizeof(则
..
我有以下的code,我试图编译。当我与性病= C99试了一下有关“式结构addrinfo中的隐式声明”和“函数的getaddrinfo的隐式声明的”警告失败。它与STD = gnu99。 的#include< SYS / types.h中> #包括LT&; SYS / socket.h中> #包括LT&;&netdb.h中GT;INT失败(为const char *主机,为co
..
这是个好主意,矢量化code?什么是在什么时候做方面的良好做法?下面会发生什么? 解决方案 矢量意味着编译器检测到您的独立指令为一体的 SIMD指令。通常的例子是,如果你做类似 为(i = 0; I< N;我++){ 一个由[i] = A [i]于+ B [I]; } 这将作为矢量(使用矢量标记)为(i = 0;我≤(N-N%VF); I + = VF){ 一个
..
我试图用GDB调试(找到一个恼人的段错误)。当我运行: GDB ./filename 在命令行中,我得到了以下错误:这是GDB配置为“i686的-PC-Linux的 GNU“...”/路径/ EXEC“:不执行 格式:文件格式无法识别 当我执行:文件/路径/执行/ 我得到以下信息: ELF 64位LSB的可执行文件,AMD X86-64, 版本1(SYSV),为GNU / Lin
..
我一直在寻找通过一些配置文件和我见过两个正在使用(虽然在不同的架构)。如果您使用在Linux中的gcc是有传球选择给连接器两个参数之间有什么区别?阅读GCC手册它们据我可以告诉解释几乎相同。 解决方案 我真的不知道该做些什么比仰望男人的gcc ,你应该保持考虑到为未来的问题有关GCC调用。所以: -Xlinker选项 把option作为一个选项给连接器。您可以使用此提供哪些GC
..
在标准库(glibc的)我看到 SYS / mman.h __ MMAP C $ C>。什么目的?我们怎么还调用函数 MMAP 这似乎并没有在任何地方声明。我的意思是,我们包括 SYS / mman.h 对于这一点,但 SYS / mman.h 未声明 MMAP ,它宣称只有 __ MMAP 。 解决方案 从GNU手册: 在除本手册中介绍的名称,保留名称 包括所有外部标识符(全局函
..
这code不编译我的gcc版本4.3.2(Debian的4.3.2-1.1) 的main(){ INT UNIX; } 我已经检查了C关键字列表和“UNIX”是不是其中之一。 为什么我会得到下面的错误? unix.c:2:错误:预期的标识符或'('前的数字常量 别人吗? 解决方案 UNIX 不是该标准保留的一个标识符。 如果您编译 -std = C89 或 -std = C9
..
有没有这样做的副作用: C code: 结构foo的{ 时int k; };INT ret_foo(常量结构美孚* F){ 返回f.k; } C ++ code:类酒吧:富大众{ INT my_bar(){ 返回ret_foo((富)本); }}; 这里有一个的extern“C”围绕C ++ code和每code是它自己的编译单元内。 这是
..
不久,我想知道,如果GCC(或g ++。我需要它的 C ,但也很对C ++的好奇)定义的任何特殊符号,如 -g 已启用。可以?如果是这样,是什么符号? 在搜索过程中我发现: _DEBUG 手动定义(通过手动我的意思是 -D_DEBUG ),并从Visual C程序员采取一种习惯(因为VC定义 _DEBUG 在调试模式下编译时) NDEBUG 是如果不能在调试模式下定义。虽然我发现了几个地
..
我使用RDTSC和CPUID指令(用挥发性内汇编指令)来衡量一个程序的CPU周期。该RDTSC指令给出了我的Linux程序现实的结果(速度优化-o2 -fomit帧指针)和Windows(使用速度优化选项的C编译器为MS Visual Studio 2008中(我认为它VC 9.0))。 最近,我实现了一个新的方案,它使用了很多表的查找和这样的东西的。不过,这一方案在Linux上使用gcc的优化
..
我即将踏上的某些功能重构在我的code一个回合。我有单元测试,以确保我没有破坏任何东西,一个漂亮的数额,但我不知道他们给我的覆盖面。是否有可以分析code和看到的功能保持不变的工具吗? 我打算重构一些比较孤立的code,所以我并不需要检查整个程序,只是我工作的地方。 有关的背景下,code我工作在C / C ++,我在Linux上使用与海湾合作委员会和VIM。 解决方案 的gcov
..
我试图编译从二郎山NIF测试( HTTP:// WWW。 erlang.org/doc/man/erl_nif.html )在Mac OS X狮子。我不能让它编译。我缺少一个编译器标志?这是我得到的错误: 计算机:〜我$的gcc -fPIC -shared -o niftest.so niftest.c -I在/ usr /本地/库/二郎/ R14B02 / lib中/二郎/ usr / inc
..
我试图创建一个静态库到我的PHP扩展中使用。要做到这一点,我用我的编译 .C 文件 GCC -c file.c中-o file.o 并获得的.o 文件。然后我用 AR RCS lib.a *的.o 全部编译对象归档到 .A 文件。 这样做后,我指的是这个 .A 文件编译我的PHP扩展的时候,但我得到了以下错误: ***警告:连接共享库<扩展名为GT; .la反对 ***静态库lib.a是
..
我想了解共享库在C以下行为 机一 $猫one.c #包括LT&;&stdio.h中GT;诠释主(){ 的printf(“%D”,45); } $ GCC one.c -o 1 -O3 $ LDD 1 Linux的gate.so.1 => (0x00331000) libc.so.6的= GT; /lib/tls/i686/cmov/libc.so.6(0x0
..
可能重复:结果
..
让我们假设我有没有外部的依赖C文件,只有常量数据段。我想编译这个文件,然后得到一个二进制数据,我可以在其他程序中,函数会通过函数指针被用来加载。 让我们看一个例子,这里是一个fictionnal二进制模块,在f1.c 静态常量unsigned char型mylut [256] = { [0 ... 127] = 0, [128 ... 255] = 1, };无效F1(无符号字
..