`
weiyinchao88
  • 浏览: 1187348 次
文章分类
社区版块
存档分类
最新评论

内存分配,任意字节对齐

 
阅读更多
有这么一道题目,要求按任意字节对齐分配内存,接口:
char * aligned_malloc(int size, int alignment)//size 为分配的内存大小,alignment对齐基数(可以为任意数)
这个在gcc库函数里能找到源码,在ffdshow等开源代码里面也能找到源码,实现如下:

void * aligned_malloc (int size, int alignment)
{
void* ptr = malloc(size + alignment);

if (ptr)
{
void* aligned = (void*)(((long)ptr + alignment) & ~(alignment - 1));
((void**)aligned)[-1] = ptr;

return aligned;
}
else
return NULL;
}

void *aligned_free(void *paligned)
{
delete [ ]paligned;
}



解这道题目关键是和释放联系起来,利用分配的内存首地址的前一地址记录内存真正分配的起始位置,想不到这点就玩完了。
面试的时候经常会考这类题目,大家可以多看看linux下面库函数的源码,对自己本身就是一种提高。

分享到:
评论

相关推荐

    任意字节对齐分配内存

    本文以程序实例阐述了,如何在程序当中实现任意字节对齐。

    delphi 在内存中直接运行EXE类型的资源文件

    // 按任意基址分配内存 p := MyVirtualAllocEx(result, nil, ImageSize, MEM_RESERVE or MEM_COMMIT, PAGE_EXECUTE_READWRITE); if p <> nil then DoRelocation(peH, Ptr, p); // 重定向 end; end; if p <> nil then...

    c/c++ 学习总结 初学者必备

    栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。...

    opencv学习资料

    4.1 1、图像的内存分配与释放 4.1.1 (1) 分配内存给一幅新图像: 4.1.2 (2) 释放图像: 4.1.3 (3) 复制图像: 4.1.4 (4) 设置/获取感兴趣区域ROI: 4.1.5 (5) 设置/获取感兴趣通道COI: 4.2 2、图像读写 ...

    OpenCV_编程简介(入门必读)

    4.1 1、图像的内存分配与释放 4.1.1 (1) 分配内存给一幅新图像: 4.1.2 (2) 释放图像: 4.1.3 (3) 复制图像: 4.1.4 (4) 设置/获取感兴趣区域ROI: 4.1.5 (5) 设置/获取感兴趣通道COI: 4.2 2、图像读写...

    你必须知道的495个C语言问题

    然后又使用一些内存分配技巧使namestr数组用起来好像有多个元素,namelen记录了元素个数。它是怎样工作的?这样是合法的和可移植的吗? 2.8 我听说结构可以赋给变量也可以对函数传入和传出。为什么K&R1却明确说明...

    《你必须知道的495个C语言问题》

    书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...

    C语言FAQ 常见问题列表

    然后又使用一些内存分配技巧使 namestr 数组用起来好像有多个元素。这样合法和可移植吗? o 3.7 是否有自动比较结构的方法? o 3.8 如何向接受结构参数的函数传入常数值? o 3.9 怎样从/向数据文件读/写结构? ...

    x64进程远程hook,x64_远程调用函数,源码更新V1.8.2:2021/4/12-易语言

     2,因为穿插代码中会调用API函数,而64位汇编必须遵守栈指针16字节对齐,故对穿插代码进行栈指针16字节对齐,增强稳定性  3,hook指令安装支持长度由6-127字节 变动 为 6-119字节,原因么没必要说了,代码优化...

    C语言程序设计标准教程

    下表列出了Turbo C中各类整型量所分配的内存字节数及数的表示范围。 类型说明符 数的范围 分配字节数 int -32768~32767 ■■ short int -32768~32767 ■■ signed int -32768~32767 ■■ unsigned int 0~65535 ■...

    滴水三期完整版(96课时)

    第22讲:2015-02-05(C语言09_字节对齐_结构体数组) 第23讲:2015-02-06(C语言10_Switch语句反汇编) 第24讲:2015-02-26(C语言11_指针1) 第25讲:2015-02-27(C语言11_指针2) 第26讲:2015-02-28(C语言11_指针3) ...

    你必须知道的495个C语言问题(PDF)

    然后又使用一些内存分配技巧使namestr 数组用起 来好像有多个元素。这样合法和可移植吗? . . . . . . . . . . . . 8 2.7 是否有自动比较结构的方法? . . . . . . . . . . . . . . . . . . . . 8 2.8 如何向接受...

    grub4dos-V0.4.6a-2017-02-04更新

    --h-to-l* --l-to-h 点阵字符在字节的存储方式; --font-high=[font_h] 点阵字符的高与宽(应当相等)。 注:* 是默认项。 例子:font /my.hex font --bin --verti-scan --l-to-h --font-high=20 /2_20.dzk ...

    API之网络函数---整理网络函数及功能

    GetCompressedFileSize 判断一个压缩文件在磁盘上实际占据的字节数 GetCurrentDirectory 在一个缓冲区中装载当前目录 GetDiskFreeSpace 获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量 ...

    Python核心编程第二版(ok)

     3.5.3 内存分配   3.5.4 引用计数   3.5.5 垃圾收集   3.6 第一个Python程序   3.7 相关模块和开发工具   3.8 练习   第4章 Python对象   4.1 Pythonc对象   4.2 标准类型   4.3 其他...

    Python核心编程第二版

     3.5.3 内存分配   3.5.4 引用计数   3.5.5 垃圾收集   3.6 第一个Python程序   3.7 相关模块和开发工具   3.8 练习   第4章 Python对象   4.1 Python 对象   4.2 标准类型   4.3 其他...

Global site tag (gtag.js) - Google Analytics