C/C++申请对齐内存的技巧
2019-04-22 本文已影响0人
cx7
申请内存时,申请的大小是4k的整倍数时,性能最好.
因为*nix的内存页的大小是4k的,可以通过读取系统配置验证这一点
cxdeMacBook-Pro:build cx$ getconf PAGE_SIZE
4096
申请大块内存时,通过简单的字节数校验,有助于提高程序性能.
template <typename T>
T alignSize(T bytes) {
T ret = bytes;
if (ret & 0xfff) { //0xfff = 4095 如果与4095不为0 说明不是4096对齐的 需要修改
ret &= ~0xfff; //与~0xfff会把低12位清0
ret += 0x1000; //0x1000 = 4096 清0后加上4k大小
}
return ret;
}
int s1 = 4095, s2 = 4097;
int s3 = alignSize(s1);
int s4 = alignSize(s2);
输出:
cxdeMacBook-Pro:align cx$ ./a.out
s3 : 4096
s4 : 8192