源代碼:
int array[] = {1,2,3};
int *p = array;
int *q = array + 2;
int v = q - p;
匯編:
...
;從棧上取指針q的地址賦值給rax
0x100003f32 <+82>: movq -0x38(%rbp), %rax
;從棧上取指針p的地址賦值給rdx
0x100003f36 <+86>: movq -0x30(%rbp), %rdx
;rax-rdx結(jié)果賦值給rax. 這里rax等于0x8
0x100003f3a <+90>: subq %rdx, %rax
;rax算術(shù)右移2位,結(jié)果賦值給rax. 這里rax就是2
0x100003f3d <+93>: sarq $0x2, %rax
...
兩個(gè)整型指針相減,結(jié)果是: 地址值差值 / sizeof(int)