C/C++申请对齐内存的技巧

申请内存时,申请的大小是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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 又是一年秋招季,哎呀妈呀我被虐的惨来~这不,前几阵失踪没更新博客,其实是我偷偷把时间用在复习课本了(雾 坚持在社区...
    tengshe789阅读 6,167评论 0 8
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,795评论 1 32
  • 内存的历史 现代的intel处理器可以追溯到最早期的intel芯片。1.8085处理器充分利用了芯片整合技术,它将...
    Mr_Bluyee阅读 4,066评论 0 0
  • 1 内存寻址 1.1 物理地址、虚拟地址以及线性地址 物理地址: 物理内存的内存单元地址 虚拟地址: 程序员看到的...
    疯狂小王子阅读 8,108评论 3 21
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,841评论 3 83