今天在用malloc分配内存时,想查看一下实际分配后的内存大小,一开始找到了microsoft的方法_msize,后来发现linux下没有相关的方法。不过最终找到了

malloc_usable_size

        这个函数的用法是返回调用malloc后实际分配的可用内存的大小


下面贴上代码,如有什么问题,请拍砖啦:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

int main(int argc, char * argv[])
{
        printf("int 长度为 :%d\n", sizeof(int));
        int *a, b = 1;
        int nbytes;
        a = (int *)malloc(sizeof(int) * 3);
        nbytes = malloc_usable_size(a);
        printf("动态内存存的长度为:%d\n", nbytes);
        printf("a的长度:%d\n", sizeof(a));
        a[0] = b;
        a[0] += 1;
        a[1] = 3;
        a[2] = 5;
        printf("b = %d\n", b);
        printf("a = %d\n", *a);
        printf("指针地址:b - 0x%x\n", &b);
        printf("释放前,指针地址:a - 0x%x\n", a);
        free(a);
        a = NULL;
        printf("释放后,指针地址:a - 0x%x\n", a);
        if(a != NULL)
                printf("a = %d\n", *a);
        else
                printf("a is NULL, %d \n", a);
        return 0;
}

返回值为:

int 长度为 :4
动态内存存的长度为:12
a的长度:4
b = 1
a = 2
指针地址:b - 0xbff4ad64
释放前,指针地址:a - 0x9f01008
释放后,指针地址:a - 0x0
a is NULL, 0 


GitHub 加速计划 / ma / mall
54
14
下载
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
最近提交(Master分支:4 个月前 )
c15dcfce - 18 小时前
521d31d0 - 1 天前
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐