在视频编解码中,如何申请char   mem_2D[1920][1080],

char  mem_3D[4][1920][1080],

char mem_4D[6][4][1920][1080],高效 又  可移植申请内存呢?

请看如下代码:

看完后,如要申请的是 int  ,不是char ,如何修改? 如何要8字节对齐,如何修改?

请自己考虑,很简单的。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef  unsigned char  pel_t;
typedef  int   int_t;int  get_mem_2D(pel_t *** arr2D,int row,int column)
{int i;if ((*arr2D = (pel_t **)calloc(row,sizeof(pel_t*))) == NULL){printf("can't calloc memory 2D\n");return 0;}if (((*arr2D)[0] = (pel_t *)calloc(row * column,sizeof(pel_t))) == NULL){printf("can't calloc memory 2D data\n");return 0;}for(i = 1; i < row;i++)(*arr2D)[i] = (*arr2D)[i- 1] + column;return (row *column * sizeof(pel_t));
}int get_mem_3D(pel_t ****arr3D,int frames,int row,int column)
{int i;if ( (  *arr3D = (pel_t ***) calloc(frames,sizeof(pel_t*)) ) == NULL){printf("can't calloc memory 3D\n");return 0;}for(i = 0 ;i < frames; i++)get_mem_2D(&(*arr3D)[i],row,column);return (frames * row * column * sizeof(pel_t));
}int get_mem_4D(pel_t *****arr4D,int index,int frames,int row,int column)
{int i;if ( (  *arr4D = (pel_t ****) calloc(index,sizeof(pel_t*)) ) == NULL){printf("can't calloc memory 3D\n");return 0;}for(i = 0 ;i < index; i++)get_mem_3D(&(*arr4D)[i],frames,row,column);return (index  * frames * row * column * sizeof(pel_t));}void free_2D(pel_t ** arr2D)
{if (arr2D){if (arr2D[0])free(arr2D[0]);elseprintf(" free wrong");free(arr2D);}else{printf( "not memory free\n");}
}void free_3D(pel_t *** arr3D,int frames)
{int i;if (arr3D){for(i = 0; i < frames;i++){free_2D(arr3D[i]);}free(arr3D);}else{printf( "not memory free\n");}
}void free_4D(pel_t **** arr4D,int index,int frames)
{int i;if (arr4D){for(i = 0; i < index;i++){free_3D(arr4D[i],frames);}free(arr4D);}else{printf( "not memory free\n");}
}void main(void)
{int ret;pel_t  **arr;pel_t  ***arr3D;pel_t  ****arr4D;ret = get_mem_2D(&arr,1080,1920);printf("ret = %d\n",ret);ret = get_mem_3D(&arr3D,4,1080,1920);printf("ret = %d\n",ret);ret = get_mem_4D(&arr4D,6, 4,1080,1920);printf("ret = %d\n",ret);free_2D(arr);free_3D(arr3D,4);free_4D(arr4D,6,4);}

如何高效、可移植申请内存代码。相关推荐

  1. 【Android 逆向】Android 进程代码注入原理 ( 进程注入原理 | 远程调用流程 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 )

    文章目录 一.进程注入原理 二.远程调用流程 ( 获取 so 动态库地址 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 ) 一.进程注入原理 调试进程 At ...

  2. 快速排序quicksort算法细节优化(一次申请内存/无额外内存排序)

    文章目录 1.只申请一次内存,避免多次递归调用时反复的申请和释放内存,提高程序运行效率 2.不申请内存,在原数组上直接排序 优化比较总结 对链接中快速排序进行代码优化 https://blog.csd ...

  3. python 申请内存_python内存分配

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python 中的sys模块极为基础而重要,它主要提供了一些给解释器使用(或由它 ...

  4. JVM:高效并发机制——内存模型、线程、锁

    为什么要进行并发(多任务处理) 处理器能力很强,尽可能压榨其劳动力 处理器处理速度与存储和通信速度相差甚大(IO.网络通信.数据库访问非常耗时),使得处理器总处在等待的状态,浪费计算资源 物理机提高处 ...

  5. 使用VirtualAlloc在0x400000处申请内存

    一开始老是申请内存失败,返回487,后来找到了解决方法,主要就是VirtualAlloc第三个参数不要写MEM_RESERVE,然后申请的空间也不能太大,否则还是会失败的. 假如你看到了这篇文章,我猜 ...

  6. 一种高效快速的内存池实现(附源码)

    此算法灵感来自于apache内存池实现原理,不过读者如果没有看过apache内存池实现也无关系,因为本算法相对apache内存池算法更为简单而且易懂,个人认为某些场合也更为高效,或许真正到了apach ...

  7. C++中申请内存的正确方法

    申请内存的方法不合理: 合理: 解析:检查内存泄露的最好办法,就是检查完全配对的申请和释放(在代码的同一层次),在函数中申请而在外部释放,将导致代码的一致性变差,难以维护.而且,你写的函数不一定是你自 ...

  8. C++二维数组动态申请内存

    好久没用C++刷题了,今天早上刷了几条题,感觉很陌生了.怪我,大二下实在太颓废了,没啥作为. 今天更新个关于c++二维数组内存申请的问题,当初作为菜鸟初学指针的时候,还是在这方面有点搞不通的.今天用到 ...

  9. 测试C语言malloc申请内存不释放结果

    测试:C语言,用malloc动态申请内存,不free,观察效果. 代码 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include ...

最新文章

  1. GCC编译选项参数介绍
  2. android监听器在哪里创建,[转载]android开发中创建按钮事件监听器的几种方法
  3. 笔记本敲代码真香,包邮送一个!
  4. 《MySQL必知必会》[01] 基本查询
  5. 【渝粤题库】广东开放大学 Linux操作系统 形成性考核
  6. Stooge排序与Bogo排序算法
  7. 通俗理解滑模变结构(2)
  8. SQL Server中SQL Union vs Union All
  9. Python Tricks(二)—— 牛顿法求解平方根(最大整数)
  10. RAC Debug开关修改工具
  11. table中td内容过长自动换行
  12. tensorflow pb ckpt pbtxt
  13. 博图注册表删除方法_回收站删除的文件怎么恢复?手把手教你找回
  14. 如何制作企业在线产品手册?这里有一些简单的方法!
  15. AI虚拟人物 数字人直播,不用出镜,不用露脸的直播方式(附教程 软件)
  16. Cross-sell and Up-sell
  17. 王者荣耀背后的实时大数据平台用了什么黑科技?
  18. 矩阵理论及其应用课后习题作业:第五章 第六章
  19. 7-55 Keven裂了
  20. 详解JUC高并发编程

热门文章

  1. 【转】产品经理如何进行BRD,MRD,PRD,DRD,FRD编写
  2. 【转】WPF默认控件模板的获取和资源词典的使用
  3. 【转】wpf从我炫系列1----布局控件的使用(上)
  4. SharePoint无代码工作流设计开发实例——交通费报销流程(二)
  5. Spark一些组件的定义
  6. java await signal_【Java并发008】原理层面:ReentrantLock中 await()、signal()/signalAll()全解析...
  7. 【LeetCode 2】两数相加(链表)
  8. 【牛客 - 369B】小A与任务(贪心,优先队列)
  9. 【POJ - 3304 】Segments(计算几何,思想转化,直线和线段相交)
  10. 【 CodeForces - 1060B 】Maximum Sum of Digits(思维,构造)