- 让我们输入10个数,然后在experience 5报错了,gdb调试发现是movntps汇编语句报错,
- 查阅之后发现,movaps必要要对齐16字节,而edx的地址是0x0804c4a8并没有对齐16字节,所以不行,而0x0804c4a8是分配的堆地址
movntps m128,XMM
m128 <== XMM 直接把XMM中的值送入m128,不经过cache,必须对齐16字节.
- 所以我们要使所有的堆地址对齐16字节才能不报错,只需要所以malloc分配的堆块大小都对齐16字节,写个脚本计算一下符合的size
for i in range(3,13):
num = pow(2,i)
while True:
tmp = num/8
a = tmp if (tmp * 8 + 4) >= num else tmp+1
malloc_size = 8 * (a+1)
if malloc_size % 16 == 0:
print num
break
num += 1
image.png
网友评论