7得票2回答
饱和减法 - AVX或SSE4.2

我正在提升一个程序(C语言)的性能,但是即使优化最“昂贵”的循环,也无法获得更好的执行时间。 如果数组元素大于零,则必须从一个无符号长整型数组中减去1。 循环代码如下: unsigned long int * WorkerDataTime; ... for (WorkerID=0;Wor...

7得票2回答
在GCC风格的扩展内联汇编中,是否可以输出“虚拟化”的布尔值,例如进位标志(carry flag)?

如果我有以下C++代码来比较两个128位无符号整数,使用内联amd-64汇编: struct uint128_t { uint64_t lo, hi; }; inline bool operator< (const uint128_t &a, const uint128...

9得票4回答
如何解决GCC警告“XXX的地址永远不会为空”的问题?

我正在编写一个C程序。有一个函数需要两个指针作为参数,称之为cmp()。这里我提供一个简化版的cmp()函数以说明问题: int cmp(struct foo *a, struct foo *b) { return a->bar == b->bar; } 我想制作一个...

38得票4回答
使用 C++14 中的 'auto func(int)' 的类型推导前缀 'auto'。

我使用GCC编译器用C ++14编译了以下程序。 #include <iostream> using namespace std; auto func(int i); int main() { auto ret = func(5); return 0; } ...

15得票1回答
如何使用GCC对C语言for循环体进行对齐?

在我们的嵌入式架构中,我们有一个64位IAB(指令对齐缓冲区)。为了优化获取序列,需要循环体从8字节边界开始对齐。 在汇编语言中,使用“.balign”指令很容易实现这一点,但我找不到一种语法来提示C编译器对代码进行对齐。 尝试通过带有“.balign”指令的内联汇编来先于for循环,但这...

17得票2回答
为什么gcc在非调试构建中添加符号?

当我使用gcc进行发布构建时(即我没有指定 -g ),我似乎仍然在二进制文件中得到符号,并且必须使用 strip 来删除它们。事实上,我仍然可以在gdb中断点函数并获得回溯(尽管没有行号)。 这让我感到惊讶-有人能解释一下为什么会发生这种情况吗? 例如: #include <std...

10得票1回答
为什么GCC在匿名变量上没有显示任何错误?

我读到这个问题解释了匿名变量在C++中是无效的。 但是下面的程序在GCC 7.2上编译时没有任何警告或错误(即使使用-Wall)- 演示:int main() { int (*); // anonymous variable? } 这里,显然也是一个整数类型的匿名变量。那么,为什么G...

9得票5回答
为什么在Windows 7上,在C语言中使用错误的格式说明符会导致程序崩溃?

我的程序如下: #include <stdio.h> #include <string.h> int main() { char string[] = "Gentlemen start your engines!"; printf("...

14得票1回答
为什么gcc编译f(1199)和f(1200)会有不同的结果?

什么导致GCC 7.2.1在ARM上对于某些常量使用从内存(lr)加载,而在其他一些情况下使用立即数(mov)?具体来说,我看到以下内容: GCC 7.2.1适用于ARM编译了这个:extern void abc(int); int test() { abc(1199); return 0;...

7得票2回答
C 中内置函数的功能定义

我们在C程序中包含像stdio.h这样的头文件,以使用内置的库函数。我曾经认为这些头文件包含了我们在程序中可能使用的内置函数的函数定义。但很快发现并非如此。 当我们打开这些头文件(例如stdio.h)时,它们只包含函数原型,我看不到函数定义。我看到的是这样的东西: 00133 int ...