内存分配中的对齐操作
2013-05-27 05:32
183 查看
Problem
Memory operation with alignment
Solution
Output
Memory operation with alignment
Solution
#include <iostream>
using namespace std;
int aligned_malloc(void **memptr, size_t alignment, size_t size)
{
size_t len = size + alignment + sizeof(void *);
void *ptr = malloc(len);
if(ptr == NULL){
return 0;
}
*memptr = (unsigned int *)((((unsigned)ptr) + alignment + sizeof(void *)) & ~(alignment - 1));
*((unsigned int *)(((unsigned int *)*memptr) - 1)) = (unsigned)ptr;
return 1;
}
int aligned_free(void *memptr)
{
if(memptr == NULL){
return 0;
}
else{
free((void *)(*((unsigned int *)memptr - 1)));
return 1;
}
}
int main(int argc, char* argv[])
{
for(int i = 1; i < 257; i *= 2){
void *memptr = NULL;
aligned_malloc(&memptr, i, 1000);
cout << "aligned :" << i << " -- " << hex << (unsigned)memptr << endl;
aligned_free(memptr);
}
return 0;
}
Output
aligned :1 -- 396445
aligned :2 -- 396446
aligned :4 -- 396448
aligned :8 -- 396448
aligned :10 -- 396b20
aligned :20 -- 396b20
aligned :40 -- 396b40
aligned :80 -- 396b80
aligned :100 -- 396c00
相关文章推荐
- C语言,内存对齐,内存分配,地址操作,结构体(二)
- C语言,内存对齐,内存分配,地址操作,结构体(一)
- 一. 内存操作与分配
- 内存对齐的初步讲解--linux和windows平台下内存分配的差异
- Windows驱动开发小练习-内存分配与链表操作
- Delphi 的内存操作函数(3): 给结构体指针分配内存
- 再谈内存分配与对齐
- (原创)VB调用DLL(VC)使用结构体参数时的内存对齐及分配的问题.
- 内存分配的对齐问题
- 老基础的一些总结 大小端 内存对齐 分配
- 实现任意字节对齐的内存分配和释放
- ROUND_UP函数详解(STL内存分配的时候 内存对齐上调大小的函数)
- 内存对齐分配策略(含位域模式)
- 变量的内存分配:内存对齐 .
- C# 使用 StructLayoutAttribute 时 C# /C++ 内存空间分配与成员对齐问题
- [原]Java字符串的内存分配--从C语言字符串操作说起
- C语言内存分配问题和 C语言中的内存对齐
- javascript ArrayBuffer类型化数组和视图的操作 个人理解类型化数据就是内存分配区域,不同数据的存储就是视图DataView咯 var buffers = []; var jso
- c/c++深入篇之内存分配与内存对齐的探讨
- .NET Framework-垃圾回收器实现内存的分配、释放,文件的操作和IO流