美文网首页C/C++
C/C++申请对齐内存的技巧

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

作者: cx7 | 来源:发表于2019-04-22 15:54 被阅读0次

申请内存时,申请的大小是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

相关文章

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

    申请内存时,申请的大小是4k的整倍数时,性能最好.因为*nix的内存页的大小是4k的,可以通过读取系统配置验证这一...

  • sizeof与字节对齐

    参考 【面试题】sizeof引发的血案编译器与字节对齐c 语言字节对齐问题详解C/C++内存对齐内存存取粒度C和C...

  • C++中New关键字和命名空间

    动态内存分配 C++中的动态内存分配C++中通过new关键字进行动态内存申请C++中的动态内存申请是基于类型进行的...

  • C++中的新成员

    C++中的动态内存分配 C++中通过new关键字进行动态内存申请 C++中的动态内存申请是基于类型进行的 dele...

  • GC基础

    1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 ...

  • [C++之旅] 6 内存的申请和释放

    [C++之旅] 6 内存的申请和释放 申请内存的方式 C语言方式 申请内存使用函数void *malloc(siz...

  • golang 和 C++ 的内存对齐

    golang 和 C++的内存对齐,基本一致,记住规则和对应类型的 size 即可 内存对齐规则 有效对齐值是固定...

  • c++内存对齐

    1、为什么要进行内存对齐呢? 平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台...

  • 十、动态内存分配与命名空间

    1、C++中的动态内存分配 通过new关键字进行动态内存申请 C++中的动态内存申请时基于类型进行的 delete...

  • C/C++内存对齐

    在面试或工作中,经常会遇到内存对齐的问题。这里结合我的理解谈一谈对内存对齐的理解。 1. 为什么要内存对齐,不对齐...

网友评论

    本文标题:C/C++申请对齐内存的技巧

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