linux申请内存malloc,linux下malloc实际开辟空间大小

#include int main(int argc, char * argv[])

{

printf("int 长度为 :%ld\n", sizeof(int));

int *p, b = 1;

int nbytes;

/*malloc参数可为0 但不可以为负*/

//测试本机64位机,只要参数小于24(包括0)

//第一次最小分配24字节

//若大于24字节, 例如1000,则分配1000或者1000大一点内存

p = (int *)malloc(0);

if(p == NULL)

{

perror("malloc");

exit(1);

}

/* malloc_usable_size函数返回malloc申请空间的大小 */

nbytes = malloc_usable_size(p);

printf("动态内存的长度为:%d\n", nbytes);

printf("a的长度:%ld\n", sizeof(p)); //指针:32位4字节,64位8字节

p[0] = 1;

p[1] = 2;

p[2] = 3;

p[3] = 4;

p[4] = 4;

p[5] = 5;

//p[6] = 6; //当超出分配的空间24,程序崩溃(必须有free, 设置NULL则是个良好的习惯)

printf("b = %d\n", b);

printf("p = %d\n", *p);

printf("指针地址:b - %p\n", &b);

printf("释放前,指针地址:a - %p\n", p);

free(p);

p = NULL;

printf("释放后,指针地址:a - %p\n", p);

if(p != NULL)

printf("p = %d\n", *p);

else

printf("p is NULL, %p \n", p);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux中,kmalloc、kzalloc、vmallocmalloc是四种不同的内存分配函数,它们主要用于不同的场景和目的。 首先,kmalloc是用于在内核空间中分配较小且物理上连续的内存块的函数。它分配的内存在虚拟地址空间上也是连续的。kmalloc通常用于需要物理上连续内存的情况,比如DMA操作。 kzalloc是通过在kmalloc分配的内存空间上执行memset清零操作来初始化的。这意味着kzalloc分配的所有元素都将被初始化为0。kzalloc可以看作是kmalloc和memset的结合,适用于需要分配并清零内存的情况。 vmalloc用于在虚拟地址空间中分配较大的内存空间,虚拟内存空间上的地址是连续的,但在物理上并不要求连续。vmalloc适用于需要申请大块内存的情况,例如内核中的高速缓存。 而malloc是用于在用户空间中分配内存的函数。与kmalloc和vmalloc不同,malloc用于用户空间,它通常比较快速并且不对所分配的内存进行清零操作。malloc适用于用户应用程序中分配内存的场景。 总结起来,kmalloc适用于在内核空间分配较小且物理上连续的内存,kzalloc在kmalloc的基础上进行初始化清零,vmalloc适用于分配较大的虚拟内存空间,而malloc适用于用户空间分配内存。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [linux内存管理之malloc、vmalloc、kmalloc的区别](https://blog.csdn.net/weixin_33862041/article/details/85987946)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值