volatile 关键字不适用于 gcc 内联汇编
volatile keyword does not work for gcc inline assembly
我需要运行这个简单的内联汇编代码:
#include <stdio.h>
int count;
int main() {
count = 0;
for (int i = 0; i < 10; i++) {
asm volatile ("incl count"); // count++
}
printf("count=%d\n", count);
return 0;
}
它工作正常(打印计数=10),直到我打开优化(gcc -O1),在这种情况下它打印计数=0。我读到 "volatile" 限定符将阻止优化器将代码置于循环之外。但是这里好像没有作用。
发现问题。我必须将全局变量 "count" 定义为易变的。问题不在于将 asm 块置于循环之外。编译器简单地将 count 替换为 0 in printf.
volatile int count;
int main() {
count = 0;
for (int i = 0; i < 10; i++) {
asm volatile ("incl count"); // count++
}
printf("count=%d\n", count);
return 0;
}
我需要运行这个简单的内联汇编代码:
#include <stdio.h>
int count;
int main() {
count = 0;
for (int i = 0; i < 10; i++) {
asm volatile ("incl count"); // count++
}
printf("count=%d\n", count);
return 0;
}
它工作正常(打印计数=10),直到我打开优化(gcc -O1),在这种情况下它打印计数=0。我读到 "volatile" 限定符将阻止优化器将代码置于循环之外。但是这里好像没有作用。
发现问题。我必须将全局变量 "count" 定义为易变的。问题不在于将 asm 块置于循环之外。编译器简单地将 count 替换为 0 in printf.
volatile int count;
int main() {
count = 0;
for (int i = 0; i < 10; i++) {
asm volatile ("incl count"); // count++
}
printf("count=%d\n", count);
return 0;
}