C语言 数据对齐/内存对齐
程序员文章站
2022-06-28 19:09:52
...
在c语言中数据对齐有两种方式
位于堆中和栈中:malloc 和 初始化直接分配
对于内存对齐有相对应的方式
栈的内存对齐有两种:基于Visual C和GCC的
#define MY_MALLOC malloc
#define MY_FREE(p) if (p != NULL) { free(p); p = NULL;}
//MSVC
#define MY_ALIGN16_VC __declspec(align(16))
#define MY_ALIGN128_VC __declspec(align(128))
#define MY_ALIGN_MALLOC16_VC(n) _aligned_malloc(n, 16) // <malloc.h>
#define MY_ALIGN_MALLOC128_VC(n) _aligned_malloc(n, 128)
#define MY_ALIGN_FREE_VC(p) if (p != NULL) { _aligned_free(p); p = NULL;}
//GCC
#define MY_ALIGN16_GCC __attribute__((aligned(16)))
#define MY_ALIGN128_GCC __attribute__((aligned(128)))
#define MY_ALIGN_MALLOC16_GCC(n) memalign(16, n) // <malloc.h>
#define MY_ALIGN_MALLOC128_GCC(n) memalign(128, n)
#define MY_ALIGN_FREE_GCC(p) if (p != NULL) { free(p); p = NULL;}
对应的使用方法
注意 基于Visual C和GCC的关键字书写的位置是不一样的
//MSVC
int MY_ALIGN16_VC buf[4] = { 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff };
void *pbuf = MY_ALIGN_MALLOC16_VC(100);
MY_ALIGN_FREE_VC(pbuf);
//GCC
int buf[4] MY_ALIGN16_GCC = { 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff };
void *pbuf = MY_ALIGN_MALLOC16_GCC(100);
MY_ALIGN_FREE_GCC(pbuf);
上一篇: spring boot 配置 RestTemplate
下一篇: 设计模式