美文网首页
[Toddler's Bottle]-memcpy

[Toddler's Bottle]-memcpy

作者: 2mpossible | 来源:发表于2018-12-09 20:46 被阅读0次
    • 让我们输入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

    相关文章

      网友评论

          本文标题:[Toddler's Bottle]-memcpy

          本文链接:https://www.haomeiwen.com/subject/whwkhqtx.html