CSAPP-10 Posted on 2019-02-23 | In 计算机系统基础 | Words count in article: 346 字 | Reading time ≈ 1 mins 数组的分配与访问1234567891011int sum(int n){ int a[n]; int i,sum; for(i = 0 ; i < n; i++){ a[i] = i * 3; } for(i = 0 ; i < n; i++){ sum += a[i]; } return sum;} 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 .file "t.c" .text .globl sum .type sum, @functionsum:.LFB0: /*栈帧建立,被调用者保存寄存器的备份,栈内存分配*/ .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 subq $16, %rsp /*栈帧建立,被调用者保存寄存器的备份,栈内存分配*/ /*动态数组分配内存*/ movq %fs:40, %rcx movq %rcx, -8(%rbp) xorl %ecx, %ecx movslq %edi, %rdx leaq 18(,%rdx,4), %rdx andq $-16, %rdx //分配长度为(18+4n)&(-16)的值 /*动态数组分配内存*/ subq %rdx, %rsp movq %rsp, %rcx movl $0, %edx jmp .L2.L3: leal (%rdx,%rdx,2), %r8d movslq %edx, %rsi movl %r8d, (%rcx,%rsi,4) addl $1, %edx.L2: cmpl %edi, %edx jl .L3 movl $0, %edx jmp .L4.L5: movslq %edx, %rsi addl (%rcx,%rsi,4), %eax addl $1, %edx.L4: cmpl %edi, %edx jl .L5 movq -8(%rbp), %rcx xorq %fs:40, %rcx jne .L8 leave .cfi_remember_state .cfi_def_cfa 7, 8 ret.L8: .cfi_restore_state call __stack_chk_fail@PLT .cfi_endproc.LFE0: .size sum, .-sum .ident "GCC: (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0" .section .note.GNU-stack,"",@progbits 异质结构与数据对齐异质结构:不同数据类型的数组组合 数据对齐:为了提高数据读取速度,会将数据以2的指数倍对齐,具体数字根据硬件设施和操作系统确定。但浪费了储存空间。