Đó là điều gì đó khủng khiếp không di động.
Trong một số trình biên dịch một trong những có thể công trình (nhưng bạn phải kiểm tra với tối ưu hóa đầy đủ kích hoạt, hướng dẫn sản phẩm nào có thể được vứt bỏ):
for (i = 0; i < spinCount;)
++i; // yes, HERE
hay:
for (i = 0; i < spinCount; ++i)
((void)0);
Nếu bạn đủ may mắn sau đó trình biên dịch của bạn có thể cung cấp một macro hoặc một chức năng nội tại sẽ được biên dịch theo hướng dẫn lắp ráp nop
, giống như __noop
trong MSVC.
tài nguyên Như cuối cùng bạn chỉ có thể thêm một hướng dẫn lắp ráp duy nhất (đó là biên dịch phụ thuộc, nó có thể là __asm hoặc một cái gì đó như thế) để thực hiện ... không có gì, như thế này:
for (i = 0; i < spinCount; ++i)
__asm nop
hoặc (đánh dấu của bạn tài liệu biên dịch):
for (i = 0; i < spinCount; ++i)
asm("nop");
EDIT
Nếu bạn không có một hướng dẫn noop
và bạn không thể thêm mã lắp ráp (tôi xin lỗi, những loại com piler bạn đang sử dụng?) bạn có thể dựa vào giả định rằng một hướng dẫn với một hiệu ứng phụ sẽ không được tối ưu hóa đi (hoặc, như được đăng bởi @ouah, một truy cập vào một biến tuyên bố volatile
).
Nguồn
2012-04-24 14:59:10
http://stackoverflow.com/questions/3527829/is-this -a-bug-in-the-intel-c-compiler-icc/3527862 # 3527862 –
có ............ –
'us'? nếu mã này hoạt động thì đó phải là một CPU thực sự chậm. –