【发布时间】:2018-09-01 02:46:19
【问题描述】:
您好,我正在尝试编译 C 代码而不重新排序堆栈中的变量,但无法做到。
我尝试过使用:
__attribute__((no_reorder))
但是不行,还尝试用flag编译:
-fno-toplevel-reorder
但是没有用...所以我被卡住了。
实际代码:
uint8_t __attribute__((no_reorder)) first_buf[64];
uint8_t second_buf[32];
这是我的编译器版本:
gcc (Debian 7.2.0-19) 7.2.0
感谢您的阅读!
【问题讨论】:
-
一种解决方法是将这些变量放在一个结构中。结构字段顺序被保留。
-
我从来没有使用过这个属性,但是你怎么能告诉一个变量不要重新排序呢?似乎您必须将该属性应用于一组变量,甚至可能是一个函数.. ?
-
@Jean-FrançoisFabre 是的,这将是我最后的机会!
-
@yano 基本上 gcc 在 second_buf 之后移动了 first_buf 所以是的,应该可以说只是不要移动我这个变量另一个选项就像你说的那样只是在函数声明中将属性添加到整个过程,但也没有用