【发布时间】:2013-05-14 11:21:12
【问题描述】:
关注这个thread ...
对于这段代码:
#include <stdio.h>
int main(void)
{
int i;
size_t u;
for (i = 0; i < 10; i++) {
u = (size_t)i;
printf("i = %d, u = %zu\n", i, u);
}
return 0;
}
汇编中的输出是:
编辑:使用 -O2 编译
.file "demo.c"
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "i = %d, u = %zu\n"
.section .text.startup,"ax",@progbits
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB3:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
xorl %ebx, %ebx
.p2align 4,,10
.p2align 3
.L2:
movq %rbx, %rdx
movl %ebx, %esi
xorl %eax, %eax
movl $.LC0, %edi
addq $1, %rbx
call printf
cmpq $10, %rbx
jne .L2
xorl %eax, %eax
popq %rbx
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE3:
.size main, .-main
.ident "GCC: (Debian 4.7.2-5) 4.7.2"
.section .note.GNU-stack,"",@progbits
转换u = (size_t)i; 是否消耗额外的周期?
【问题讨论】:
-
看起来你没有打开优化器,这让它毫无意义。
-
Tnak 你汉斯,见编辑
标签: c assembly type-conversion