malloc函数

本文深入探讨了C语言中malloc函数的内存分配机制,包括分配大小的限制、堆的增长方式以及不同内存分配场景的区别。同时揭示了内存管理的重要性和常见陷阱。
int main()
{
        int *p;
        p=malloc(1);
        printf("1byte:0x%x\n",p);
        p=malloc(1);
        printf("1byte:0x%x\n",p);
        p=malloc(4096);
        printf("4096:0x%x\n",p);
        p=malloc(4096*100);
        printf("4096*100:0x%x\n",p);
        return 0;
}


#./a.out

1byte:0x8ab6008
1byte:0x8ab6018
4096:0x8ab6028
4096*100:0xb7775008

得出两个结论:

1.malloc分配器最少分配16字节。

2.一般malloc返回地址在0x8040000-0x40000000之间,且堆是向上增长的。这时候是用brk分配内存。

但是超过一定大小的堆是在0x4000000之上的。因为这个时候是用mmap分配内存

问题1:;这个大小是多少?

问题2:

#include<stdio.h>
int main()
{
        char *p=malloc(1);
        free(p);
        *p='p';
        printf("smile every day!%c\n",*p);
}


这个输出结果是 smile every day!p

不属于进程的空间,进程是不能访问的,p难道还在进程空间中?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值