小编coj*_*car的帖子

堆栈变量是否由GCC __attribute __((aligned(x)))对齐?

我有以下代码:

#include <stdio.h>

int
main(void)
{
        float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0};
        printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]);
}
Run Code Online (Sandbox Code Playgroud)

我有以下输出:

0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac
Run Code Online (Sandbox Code Playgroud)

为什么地址a[0]不是多个0x1000

到底__attribute__((aligned(x)))是什么?我误解了这个解释?

我正在使用gcc 4.1.2.

c gcc callstack memory-alignment

86
推荐指数
4
解决办法
8万
查看次数

spin_lock_irqsave vs spin_lock_irq

在SMP机器上,我们必须使用 spin_lock_irqsave而不是spin_lock_irq中断上下文.

为什么我们要保存标志(包含IF)?

还有其他中断程序可能会打断我们吗?

linux-kernel spinlock

26
推荐指数
3
解决办法
6万
查看次数

在C中使用宏将项目追加到数组

我有一个数组(C语言),应在编译时初始化。

例如:

DECLARE_CMD(f1, arg);
DECLARE_CMD(f2, arg);
Run Code Online (Sandbox Code Playgroud)

从多个文件中调用DECLARE_CMD。

我希望对此进行预处理。

my_func_type my_funcs [] = {
   &f1,
   &f2
}
Run Code Online (Sandbox Code Playgroud)

是否可以通过宏将项目附加到静态数组?

我在gcc4上使用C99(具有GNU扩展名)。

c arrays initialization c-preprocessor

6
推荐指数
2
解决办法
3949
查看次数

强制gcc传递堆栈上的参数

有没有办法强制gcc传递堆栈上函数的参数?

我不想使用寄存器进行参数传递.

更新:我使用CodeSourcery的 arm-gcc

c stack gcc parameter-passing calling-convention

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