1PyTorch 实现中的一些常用技巧
788 2023-04-03 03:23:16
嘘,别说话,吻我(开搞)
从一段代码说起
结果:
%p-obj1 打印对象的内存地址
%p-&obj1 打印对象的指针
疑问:
1.alloc做了什么事情?
2.init又做了什么?
3.怎么读取这些函数的源码?
①、先在alloc函数加断点
②、然后按住control 再点击 step into 按钮(可以多次点击)
③、此时断点来到此处(可以看到实现函数objc_alloc)
④、在objc_alloc上加符号断点
⑤、大功告成(可以看到实现是在 libobjc.A.dylib 库中的 _objc_rootAllocWithZone 函数中)
①、先在alloc函数加断点
②、勾选Debug-Debug Workflok-Always Show Disassembly
③、当走到 objc_alloc 时 按住control 点击step into,此时走到 objc_alloc函数,接下来也是符号断点(同方式一种的)
①、直接符号断点 alloc
此时,已经知道源码的位置了,然后去苹果官网去下载就好opensource.apple.com
配置好的源码github.com/wangshaofen…
然后进入计算方式
eg: (x + WORD_MASK) & ~WORD_MASK(8+7)&(~7)15: 0000 11117 : 0000 0111~7: 1111 100015&(~7): 0000 1000 = 8也就是8字节对齐
通过代码可知,苹果内部是8字节对齐计算内存的,分配内存的时候是以16字节的对齐进行分配的