- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 C 初学者类(class)上有注释说 malloc
返回一个指向与 x86 机器上的 16 字节边界对齐的 block 的指针。
这是否意味着调用 malloc(1)
没有优势,即性能与调用 malloc(16)
没有区别?
最佳答案
C标准说
The pointer returned if the allocation succeeds is suitably aligned so that it may be assigned to a pointer to any type of object with a fundamental alignment requirement and then used to access such an object or an array of such objects in the space allocated (until the space is explicitly deallocated).
所以指针对齐不是16字节,而是实现定义的;在你的实现中,碰巧有某些类型的对象需要在内存中进行 16 字节对齐;因此 malloc 返回的指针是 16 字节对齐的。
但这并不意味着 char *p = malloc(1)
分配了 16 个字节的内存 - 相反,您不能触及任何内存超越p[0]
; malloc
也需要一些内部簿记,因此 malloc(1)
总共消耗 16 字节的内存,而 malloc(16)
会消耗 32 或 64;你不会知道的。
关于c - malloc 边界大小 : is there a performance difference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36371394/
我是一名优秀的程序员,十分优秀!