编写支持对其分配的malloc和free函数,分配内存时,malloc函数返回的地址必须能被2的n次方整除
2014-11-20 22:00
288 查看
题目:《程序员面试金典(第5版)》P281
编写支持对其分配的malloc和free函数,分配内存时,malloc函数返回的地址必须能被2的n次方整除。
编写支持对其分配的malloc和free函数,分配内存时,malloc函数返回的地址必须能被2的n次方整除。
//required_bytes为需要新建的字节数,alignment为首位置需要整除的数值 //按照题目要求,alignment应该是2的n次方 void* aligned_malloc(size_t required_bytes, size_t alignment) { size_t offset = alignment - 1 + sizeof(void*); void* p = (void*)malloc(required_bytes+offset); if (p == nullptr) return nullptr; void* res = (void*)(((size_t)(p)+offset)&~(alignment-1));//关键 void** tmp = (void**)res; tmp[-1] = p; return res; } void aligned_free(void* r) { if (r != nullptr) { void** tmp = (void**)r; free(tmp[-1]); r = nullptr; } }
相关文章推荐
- C语言学习7 :二级指针定义,强制转换,多级指针初步,6级指针构造,错误应用*p=&a,错误应用 二级p2,void型指针的兼容性,malloc函数基本用法,malloc分配空间和堆栈空间的区别,验证malloc函数内存的分配,验证malloc函数的越界,内存泄漏,指针不能返回局部变量地址,内存分配
- 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- 编写支持对齐分配的malloc和free函数
- 编写支持对齐分配的malloc和free函数
- 习题 8.19(1) 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用
- 使用malloc分别分配2KB,6KB的内存空间,打印指针地址
- 使用malloc分别分配2KB,6KB的内存空间,打印指针地址
- C和指针之动态内存分配之(编写calloc函数,函数内部使用malloc函数来获取内存)
- 库实现之分配内存对齐的程序aligned_malloc和aligned_free函数
- 程序员面试金典: 9.13 C和C++ 13.10用C编写一个my2DAlloc函数,可分配二维数组。将malloc函数的调用次数降到最少,并确保 可通过arr[i][j]访问该内存。
- 对于结构体,什么时候分配内存以及为什么选择用malloc函数来分配结构体变量的地址
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- 早期malloc分配时,如果内存耗尽分配不出来,会直接返回NULL。现在分配不出来,直接抛出异常(可使用nothrow关键字)
- 使用malloc分别分配2KB的空间,然后用realloc调整为6KB的内存空间,打印指针地址
- 终于懂了:Delphi的函数名不是地址,取地址必须遵守Object Pascal的语法(Delphi和C的类比:指针、字符串、函数指针、内存分配等)good
- C和指针之动态内存分配之(编写calloc函数,函数内部使用malloc函数来获取内存)
- 使用malloc分别分配2KB的空间,然后用realloc调整为6KB的内存空间,打印指针地址
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- 内存储器管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现