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

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

2021-2-15 19:07
3650

编程新手,遇到个很奇怪的问题。
在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;
}

 

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


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

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