C语言中malloc函数的使用

观察两段代码:

int result[2];
int* result = (int*)malloc(2 * sizeof(int));

疑惑为什么不直接使用int定义,而是使用malloc函数来申请内存。

malloc更加灵活!!

使用动态内存分配(malloc)来分配内存,是一种在C语言中动态创建数组的方法,这在某些情况下可能会更加灵活。但如果知道数组大小固定为2且不会改变,也可以直接定义一个静态数组。

动态数组与静态数组之分。在相应的功能函数中更推荐使用malloc来定义长度不确定的动态数组。可以使用定义一个int * size变量来确定malloc申请的空间的大小,从而提高内存利用率。

解析malloc函数的用法

int* result = (int*)malloc(2 * sizeof(int));

以上述代码为例子。malloc函数在堆(heap)上分配一块内存,用于存储两个整数,并将该内存的起始地址赋给指针变量 result。它需要一个参数——要分配的内存的字节数。

  1. malloc指针类型转换:(int*) 是一种类型转换,将 malloc 返回的通用指针(void*)强制转换为指向 int 类型的指针。这是因为 malloc 返回的指针是通用的,需要将其转换为特定类型的指针。

  2. malloc内存大小:2 * sizeof(int) 计算了要分配的内存大小。sizeof(int) 表示一个整数的字节数,通常为4个字节(32位系统)或8个字节(64位系统),因此 2 * sizeof(int) 表示要分配的内存大小为两个整数占用的字节数,以字节为单位。(调用sizeof以便适应不同的系统)

  3. malloc返回起始地址指针:malloc(2 * sizeof(int)) 调用 malloc 函数来分配内存,这里分配的内存大小为两个整数占用的空间大小。malloc 返回一个指向分配内存起始地址的指针。

  4. 赋值:将分配的内存地址赋给 int* result,这个指针变量可以用来访问这块新分配的内存区域,即存储两个整数的空间。

注:使用 malloc 分配的内存要在不使用时手动释放,以避免内存泄漏,用 free(result) 来释放 result 指向的内存。

所以将其拆解看为分配内存加强制转换指针类型。

效率分析,不同的内存分配方式

int result[2];
int* result = (int*)malloc(2 * sizeof(int));

这两段代码在时间效率上的复杂度均为o(1),其实际处理的时间效益也类似。malloc 分配内存的时间通常与请求的内存大小无关,它只是在内存堆中找到足够大的可用内存块并返回指向该块的指针。直接定义静态数组,在编译时确定了数组的大小,程序在栈上为其分配了固定大小的内存空间,分配和释放的速度非常快。

所以在程序中的选择方式是根据其功能所决定的。所以静态数组的生命周期小于动态数组,如果在函数外部使用需要特殊处理为全局变量。通常情况,需要在函数外调用该内存信息选择malloc动态申请数组更好,可以根据需要随时释放内存信息。

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江川轻寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值