如何高效、可移植申请内存代码。
在视频编解码中,如何申请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);}
如何高效、可移植申请内存代码。相关推荐
- 【Android 逆向】Android 进程代码注入原理 ( 进程注入原理 | 远程调用流程 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 )
文章目录 一.进程注入原理 二.远程调用流程 ( 获取 so 动态库地址 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 ) 一.进程注入原理 调试进程 At ...
- 快速排序quicksort算法细节优化(一次申请内存/无额外内存排序)
文章目录 1.只申请一次内存,避免多次递归调用时反复的申请和释放内存,提高程序运行效率 2.不申请内存,在原数组上直接排序 优化比较总结 对链接中快速排序进行代码优化 https://blog.csd ...
- python 申请内存_python内存分配
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python 中的sys模块极为基础而重要,它主要提供了一些给解释器使用(或由它 ...
- JVM:高效并发机制——内存模型、线程、锁
为什么要进行并发(多任务处理) 处理器能力很强,尽可能压榨其劳动力 处理器处理速度与存储和通信速度相差甚大(IO.网络通信.数据库访问非常耗时),使得处理器总处在等待的状态,浪费计算资源 物理机提高处 ...
- 使用VirtualAlloc在0x400000处申请内存
一开始老是申请内存失败,返回487,后来找到了解决方法,主要就是VirtualAlloc第三个参数不要写MEM_RESERVE,然后申请的空间也不能太大,否则还是会失败的. 假如你看到了这篇文章,我猜 ...
- 一种高效快速的内存池实现(附源码)
此算法灵感来自于apache内存池实现原理,不过读者如果没有看过apache内存池实现也无关系,因为本算法相对apache内存池算法更为简单而且易懂,个人认为某些场合也更为高效,或许真正到了apach ...
- C++中申请内存的正确方法
申请内存的方法不合理: 合理: 解析:检查内存泄露的最好办法,就是检查完全配对的申请和释放(在代码的同一层次),在函数中申请而在外部释放,将导致代码的一致性变差,难以维护.而且,你写的函数不一定是你自 ...
- C++二维数组动态申请内存
好久没用C++刷题了,今天早上刷了几条题,感觉很陌生了.怪我,大二下实在太颓废了,没啥作为. 今天更新个关于c++二维数组内存申请的问题,当初作为菜鸟初学指针的时候,还是在这方面有点搞不通的.今天用到 ...
- 测试C语言malloc申请内存不释放结果
测试:C语言,用malloc动态申请内存,不free,观察效果. 代码 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include ...
最新文章
- GCC编译选项参数介绍
- android监听器在哪里创建,[转载]android开发中创建按钮事件监听器的几种方法
- 笔记本敲代码真香,包邮送一个!
- 《MySQL必知必会》[01] 基本查询
- 【渝粤题库】广东开放大学 Linux操作系统 形成性考核
- Stooge排序与Bogo排序算法
- 通俗理解滑模变结构(2)
- SQL Server中SQL Union vs Union All
- Python Tricks(二)—— 牛顿法求解平方根(最大整数)
- RAC Debug开关修改工具
- table中td内容过长自动换行
- tensorflow pb ckpt pbtxt
- 博图注册表删除方法_回收站删除的文件怎么恢复?手把手教你找回
- 如何制作企业在线产品手册?这里有一些简单的方法!
- AI虚拟人物 数字人直播,不用出镜,不用露脸的直播方式(附教程 软件)
- Cross-sell and Up-sell
- 王者荣耀背后的实时大数据平台用了什么黑科技?
- 矩阵理论及其应用课后习题作业:第五章 第六章
- 7-55 Keven裂了
- 详解JUC高并发编程
热门文章
- 【转】产品经理如何进行BRD,MRD,PRD,DRD,FRD编写
- 【转】WPF默认控件模板的获取和资源词典的使用
- 【转】wpf从我炫系列1----布局控件的使用(上)
- SharePoint无代码工作流设计开发实例——交通费报销流程(二)
- Spark一些组件的定义
- java await signal_【Java并发008】原理层面:ReentrantLock中 await()、signal()/signalAll()全解析...
- 【LeetCode 2】两数相加(链表)
- 【牛客 - 369B】小A与任务(贪心,优先队列)
- 【POJ - 3304 】Segments(计算几何,思想转化,直线和线段相交)
- 【 CodeForces - 1060B 】Maximum Sum of Digits(思维,构造)