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

内存分配,任意字节对齐相关推荐

  1. malloc内存分配字节对齐问题

    最近看了一些开源的C/C++库,其中都对于内存分配这块做出了自己的一些优化和说明,也涉及到了一些内存分配字节对齐以及内存分页的问题. 对于内存分配的字节对齐问题,一直都是只知其事,不知其解,平时也很少 ...

  2. rtthread 字节对齐问题 int指针访问非对齐地址崩溃

    rtthread 字节对齐问题 int指针访问非对齐地址崩溃 环境: SOC: i.MX RT1050 底板: 野火 RT1052 Kernel: rt-thread 背景: 我正在实现解析udp包, ...

  3. 【转载】Ogre的内存分配策略

    原文:Ogre的内存分配策略 读这个之前,强烈建议看一下Alexandrescu的modern c++的第一章关于policy技术的解释.应该是这哥们发明的,这里只是使用. 首先列出涉及到的头文件:( ...

  4. linux 进城 io字节,(2)linux内核之内存分配与IO口操作

    /***************************************************分配内存******************************************** ...

  5. C++ 内存分配与内存对齐

    一.C++程序内存分配 C/C++程序编译时内存分为5大存储区 栈区,由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.通俗来讲就是函 数中的变量参数等等,即{ ...

  6. Eigen向量化内存对齐/Eigen的SSE兼容,内存分配/EIGEN_MAKE_ALIGNED_OPERATOR_NEW

    1.总结 对于基本数据类型和自定义类型,我们需要用预编译指令来保证栈内存的对齐,用重写operator new的方式保证堆内存对齐.对于嵌套的自定义类型,申请栈内存时会自动保证其内部数据类型的对齐,而 ...

  7. 4 OC 中的内存分配以及内存对齐

    目录 一  OC  中的内存分配 一  OC  中的内存分配 student 结构体明明是20?为什么是24个字节,因为结构体会按照本身成员变量最大的内存进行对齐,最大成员变量是8个字节,因此就是8的 ...

  8. 内存对齐/字节对齐/数据对齐/地址总线对齐

    其实是使用InitializeAcl()时发现有个aligned,可我不知道什么是aligned 于是乎我就先搜索了对齐,结果发现了一大堆,什么[字节对齐].[内存对齐].[地址总线 对齐].[数据对 ...

  9. 关于arm处理器 内存编址模式 与 字节对齐方式 (转)

    转自:http://bavon.bokee.com/5429805.html 在x86+Linux上写的程序,在PC机上运行得很好.可是使用ARM的gcc进行交叉编译,再送到DaVinci目标板上运行 ...

最新文章

  1. NLP新秀prompt跨界出圈,清华刘知远最新论文将它应用到VLM图像端
  2. HTTP和HTTPS协议的区别
  3. MS UC 2013-0-虚拟机-标准化-部署-2-模板机-制作-2-设置-虚拟机
  4. 网络编程学习笔记(UDP的connect函数)
  5. 子线程适当Sleep的重要性
  6. java安全编码指南之:拒绝Denial of Service
  7. UI5 metadata usage in the runtime
  8. java构建二叉树_java实现二叉树的构建以及3种遍历方法
  9. 山东省大学计算机科学与技术,我校计算机科学与技术专业获山东省大学最佳专业排行榜第一名...
  10. Java实现简单图书管理系统
  11. quartz mysql 配置_Quartz框架(一)—Quartz的基本配置
  12. Quartus ii仿真界面闪退
  13. “恩智浦”杯智能车竞赛总结
  14. spleetergui2.9汉化版下载 | SpleeterGui(音轨分离软件)官方中文版V2.9.1 | 人声分离软件下载
  15. html视频全套教程,用Dreamweaver讲解html全套视频教程分享
  16. 【MatLab fdatool】Butterworth 低通 带阻 滤波器 (MatLab C++)
  17. jQuery搜索高亮显示
  18. 超级马里奥游戏开发一(游戏基本界面)
  19. 如何在Windows 10中使用“Netsh Winsock Reset”?
  20. java什么是类枚举类_java枚举类型是什么?

热门文章

  1. 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法
  2. 【转】老男孩:Linux企业运维人员最常用150个命令汇总
  3. powerdesign 缩写AK,PK,IX,CK,FK,DF,UQ
  4. linux服务器cc防御,Linux下简单的防止CC攻击
  5. 服务器怎么把信息发送给用户,java中怎么用tcp/ip将服务器的消息发送给多个用户...
  6. PWN-PRACTICE-CTFSHOW-2
  7. REVERSE-PRACTICE-CTFSHOW-2
  8. 【2019牛客暑期多校训练营(第一场) - A】Equivalent Prefixes(单调栈,tricks)
  9. 详解3D物体检测模型: Voxel Transformer for 3D Object Detection
  10. Ubuntu系统中使用搜狗输入法