首页
社区
课程
招聘
未解决 [求助]在for循环中使用malloc,实际使用内存远大于理论内存的问题
2021-2-15 19:07 3476

未解决 [求助]在for循环中使用malloc,实际使用内存远大于理论内存的问题

2021-2-15 19:07
3476

编程新手,遇到个很奇怪的问题。
在for循环里使用malloc内存占用很大,不使用for循环就正常。
如以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
//VS2019 C++
#include <stdlib.h>
#include <stdint.h>
#include <stddef.h>
#include <malloc.h>
#define LIMIT 13554432
int main(void)
{
    for (int i = 0; i < (int)LIMIT; i++){
       float *t = (float*)malloc(sizeof(float));
    }
    return 0;
}

debug查看内存占用大概为1G。

 

不使用for循环,一次性分配,内存使用为54MB。代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
#include<vector>
#include <stdlib.h>
#include <stdint.h>
#include <stddef.h>
#include <malloc.h>
#define LIMIT 13554432
 
int main(void)
{
    float* t = (float*)malloc(sizeof(float) * LIMIT);
    return 0;
}

 

两个申请的内存应该是一样的,但是很奇怪为什么第一个会大那么多?前辈们是否能指点一下。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-2-15 19:13 被bookboy编辑 ,原因:
收藏
免费 0
打赏
分享
最新回复 (5)
雪    币: 11924
活跃值: (3220)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
suiwinder 2021-2-15 19:53
2
0
这个得看看for的内存应用。下面这个应该分配的内存资源少。
雪    币: 0
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zxzy 2021-2-15 22:12
3
0
分配内存的时候会带有头部信息,在这种情况下多次malloc会产生大量的此类头部内存占用。去看下malloc/free的实现或者看下别人的小内核是怎么实现的
雪    币: 8
活跃值: (76)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bookboy 2021-2-15 23:04
4
0
zxzy 分配内存的时候会带有头部信息,在这种情况下多次malloc会产生大量的此类头部内存占用。去看下malloc/free的实现或者看下别人的小内核是怎么实现的
感谢,我这就去看下malloc的实现。
雪    币: 789
活跃值: (1519)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
のばら 2021-2-16 00:00
5
0
或许和对齐方式有关
雪    币: 772
活跃值: (977)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ffashi 2021-2-17 23:04
6
0
为什么不自己申请个堆,自己管理呢?
游客
登录 | 注册 方可回帖
返回