两种创建二维动态数组效率对比

本文探讨了两种不同的C语言动态二维数组创建方法,fun1通过逐行分配内存,而fun2则一次性分配整个数组并调整指针。通过分析,方式2由于内存分配连续且调用malloc和free次数较少,展现出更高的性能优势。在main函数中,对两种方法进行了调用以验证其效果。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// fun1使用方式1创建n行m列动态二维整数数组
void fun1(int n, int m) {
    int **array1 = (int **)malloc(n * sizeof(int *));
    int i = 0;
    int j = 0;
    for (;i < n;i++) {
        array1[i] = (int *)malloc(m * sizeof(int));
    }
    for (;i < n;i++) {
        for (;j < m;j++) {
            array1[i][j] = i * j;
        }
    }
    for (i = 0;i < n;i++) {
        free(array1[i]);
    }
    free(array1);
}
// fun2使用方式2创建n行m列动态二维整数数组
void fun2(int n, int m) {
    int **array2 = (int **)malloc(n * sizeof(int *));
    array2[0] = (int *)malloc(m * n * sizeof(int));
    int i = 0;
    for (i = 1;i < n;i++) {
        array2[i] = array[0] + i * m;
    }
    free(array2[0]);
    free(array2);
}
int main() {
    fun1(10, 100);  // fun2性能优于fun1
    fun2(10, 100);
 
    return 0;
}

方式和方式2的内存分配如下:

方式2内存分配是连续的,而且malloc和free次数更少,因此性能更高。

#编译
gcc -g -o Test test.c
#使用valgrind查内存泄漏
valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./Test

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值