场景:
1. 有些频繁使用的指针变量地址不对齐的话运行效率和对齐后的运行效率差别很大,所以在创建堆空间时,有必要对内存地址对齐提高运行效率.
2. 有些音视频处理的代码或者说自定义的malloc基本都是地址对齐的.
3. 使用原子访问的互锁函数时,InterlockedExchangeAdd都需要地址对齐.
4. 主要还是宏APR_ALIGN, 这个说是Apache源码里,就借用一下吧。
解决方案:
1. 其实就是让地址值对对齐量求模为0, 地址值最多增加n-1个偏移地址就可以整除n. &~(n-1)就是能整除n的快捷方法,相当于左移2的倍数位.
#include <iostream>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
using namespace std;
// Apache
/* APR_ALIGN() is only to be used to align on a power of 2 boundary */
#define APR_ALIGN(size, boundary) \
(((size) + ((boundary) - 1)) & ~((boundary) - 1))
void T