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

内存分配,任意字节对齐

 
阅读更多
有这么一道题目,要求按任意字节对齐分配内存,接口:
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下面库函数的源码,对自己本身就是一种提高。

分享到:
评论

相关推荐

    任意字节对齐分配内存

    下面是一段C语言函数,用于实现任意字节对齐的内存分配: ```c void* align_malloc(unsigned int size, unsigned int alignment) { unsigned char* mem_ptr; unsigned char* tmp; if (!alignment) alignment = ...

    语言:内存字节对齐详解

    在计算机系统中,内存是以字节为基本单位进行分配的,但并不是所有数据都可以从任意地址开始存储。为了优化访问速度和减少硬件限制,数据通常需要按照特定的规则排列,即对齐。例如,一个32位的整数(int)通常需要从4...

    字节对齐以及为什么要字节对齐

    字节对齐是一种在计算机编程中,特别是在C/C++编程中常见的优化策略,它涉及到如何在内存中组织数据,以确保高效访问和避免硬件错误。字节对齐的基本原理是根据数据类型及其大小来确定它们在内存中的起始位置,以...

    (c++)字节对齐与结构大小

    尤其在处理内存管理和结构体时,字节对齐直接影响到数据的存储布局及访问效率。本文将详细介绍字节对齐的基本原理、结构体大小的计算方法以及一些实际应用案例。 #### 二、字节对齐概述 **现代计算机中内存空间都是...

    ARM程序由于字节对齐引起的问题深入分析

    同时,在编写程序时,必须注意内存的分配和访问,以避免字节对齐的问题。 结论 在ARM嵌入式系统中,字节对齐是一个非常重要的概念。只有正确地理解和处理字节对齐的问题,才能编写出正确和高效的ARM程序。在C层面...

    西南交大:“计算机组成原理A”上机作业四到五次

    通过查看内存地址分配表,我们可以看到该系统在默认字节对齐方式下,结构体内各成员变量的地址分配规则是:1字节变量可以分配在任意地址上,2字节变量分配在地址为2的倍数的起始地址上。4字节及以上的变量分配在地址...

    【CSAPP实验8】动态内存分配器

    动态内存分配允许程序在运行时请求任意大小的内存块,这与静态内存分配(如栈和全局变量)相比提供了更大的灵活性。 动态内存分配器的核心是管理空闲内存块,通常通过空闲链表来实现。空闲链表是一种数据结构,用于...

    内存分配程序(C语言)

    内存分配在编程中起着至关重要的作用,尤其是在C语言中,程序员需要手动管理内存。C语言提供了`malloc()`和`free()`两个函数来处理动态内存分配和释放。 `malloc()`函数用于分配指定大小的内存块,并返回一个指向该...

    一个简单的堆内存分配器,大约200行

    5. **对齐**:为了满足特定的硬件要求,内存分配器还需要考虑对齐问题,确保分配的内存地址满足特定的字节对齐规则。 6. **错误检查**:分配器还需要进行边界检查和一致性检查,防止内存越界和双重释放等安全问题。...

    LAB.zip计算机系统lab23和malloc的实验报告

    1. 内存分配的大小:`malloc`需要精确的内存大小作为参数,单位为字节。 2. 内存未初始化:`malloc`分配的内存默认值不确定,需要程序员手动初始化。 3. 内存泄漏:如果分配的内存未被`free`释放,会导致内存泄漏,...

    malloc.pdf

    - **权利**:可以任意选择符合对齐要求的虚拟地址。 - **责任**:必须接受任何大小的内存请求;必须接受任何由`malloc`返回的指针作为`free`的参数;必须确保内存块的连续性等。 总之,在进行内存管理时,开发者...

    浅谈C中的malloc和free

    3. **对齐问题**:在某些平台上,内存分配必须符合特定的对齐要求。malloc会确保返回的指针满足对齐约束,但程序员需要了解这些约束并据此设计代码。 4. **使用sizeof运算符**:在分配数组或结构体时,使用sizeof...

    STM32启动文件详解.pdf

    堆的作用是用于动态内存分配。堆是由低向高生长的。开辟堆的大小为0X00000200(512字节),名字为HEAP,NOINIT即不初始化,可读可写,8(2^3)字节对齐。__heap_base表示堆的起始地址,__heap_limit表示堆的结束地址...

    PHP7源码分享

    - **2M字节对齐**: - PHP7中的Chunk大小通常是2M字节,这意味着每个Chunk的起始地址都会按照2M字节进行对齐。 ##### 内存预分配 为了减少内存分配的开销,PHP7采用了内存预分配机制。具体来说,当程序启动时会...

    自己动手写malloc函数

    在计算机编程中,`malloc`函数是C语言标准库中用于动态内存分配的关键函数,它允许程序在运行时请求任意大小的内存块。`malloc`的全称是“memory allocation”,即内存分配。然而,对于初学者或者想要深入理解内存...

    汇编任意长字符串排序源码

    此外,考虑到内存对齐和字节序(大端或小端)等问题,也可能需要进行适应性修改。 8. **调试与测试**:在汇编编程中,调试和测试尤为重要,因为错误可能难以发现。学会使用汇编级别的调试工具,编写测试用例验证...

    实验报告七_金泽文_PB151116041

    - 使用first fit策略进行内存分配,通过动态插入和删除操作实现。 3. **等大小固定分区算法(eFPartition)**: - `eFPartitionTotalSize()`计算分区总大小,考虑内部管理数据结构开销。 - `eFPartitionInit()`...

    008.利用堆大小差一错误爆破Linux内核-008.CVE-2016-6187 Exploiting Linux kernel

    要成功利用这个漏洞,攻击者需要精确地控制内存分配和释放的顺序,同时还需要考虑到内核内存管理机制,如页表、内存对齐和内存保护等。此外,由于内核代码通常在高度安全的环境中运行,攻击者还需要避免触发任何内核...

    C++指针重要补充内容(for RS & GIS)

    同时,要格外注意内存分配和释放的正确性,避免内存泄漏或越界写入等问题。 GDAL(地理空间数据抽象库)是一个用于读取和写入栅格和矢量地理空间数据格式的开源库,广泛应用于遥感图像处理。GDAL在处理遥感数据时...

    C语言笔试题答案

    #### 一、内存分配区域 **知识点1:局部变量、全局变量与动态数据的存储位置** - **局部变量**存在于**栈**中:局部变量是在函数内部定义的变量,它们在函数被调用时创建,在函数结束时销毁。由于这些变量的生命...

Global site tag (gtag.js) - Google Analytics