位数对齐的内存申请释放
2015-05-17 21:59
141 查看
void* alMalloc( size_t size, int alignment )
{
const size_t pSize = sizeof(void*), a = alignment-1;
void *raw = malloc(size + a + pSize);
void *aligned = (void*) (((size_t) raw + pSize + a) & ~a);
*(void**) ((size_t) aligned-pSize) = raw;
return aligned;
}
void alFree(void* aligned)
{
void* raw = *(void**)((char*)aligned-sizeof(void*));
free(raw);
}
{
const size_t pSize = sizeof(void*), a = alignment-1;
void *raw = malloc(size + a + pSize);
void *aligned = (void*) (((size_t) raw + pSize + a) & ~a);
*(void**) ((size_t) aligned-pSize) = raw;
return aligned;
}
void alFree(void* aligned)
{
void* raw = *(void**)((char*)aligned-sizeof(void*));
free(raw);
}
相关文章推荐
- 关于库函数里申请的内存空间在库函数外释放的问题的一些总结
- C++离航篇——内存的申请释放
- 当进程退出后,动态申请的内存会自动释放吗
- c++/c内存申请与释放
- 在DLL中用CRT静态库申请内存,EXE释放是不行的
- c语言中的内存管理(重点:动态内存申请释放,野指针,指针函数)
- malloc和free(2)——malloc()申请内存得到指针,指针被改动,用free释放内存报错
- 为什么程序退出前还要释放动态申请的内存资源
- Unity内存申请和释放
- C语言用完申请来的内存怎么释放
- Delphi内存管理(Integer、Boolean、Record、枚举等都是在作用域内编译器自动申请内存,出了作用域自动释放;另外,字符串、Variant、动态数组、接口也是由Delphi自动管理)
- /MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题
- vector动态申请内存然后释放
- 数组内存申请和释放,指针数组和数组指针
- 动态申请内存与释放时的异常---Byte越界(CheckBytes函数的内部机制)
- Student Manager--关于内存申请和释放
- 动态申请和释放内存
- 如何申请对齐的动态内存?
- iOS 视图控制器的内存申请与释放普遍规则
- 堆(heap segment)中的内存索要(申请)和归还(释放)