社区
C++ 语言
帖子详情
为什么同样的new std::set
[20000]代码,在不同的工程中占用的内存差距有40倍之多?
Herro
2007-08-10 09:31:15
使用的是VS2005。
我在我的一个项目中发现new std::set<int>[20000]语句会分配700m的内存,而用vs新建一个项目以相同代码只分配了20m内存,此问题导致我内存很简单的就被耗尽2G。
尝试new int没有此问题,因此怀疑是stl上有什么原因,但始终没有头绪。
各位能否根据相关经验帮我推测问题的可能原因么?
...全文
144
3
打赏
收藏
为什么同样的new std::set<int>[20000]代码,在不同的工程中占用的内存差距有40倍之多?
使用的是VS2005。 我在我的一个项目中发现new std::set[20000]语句会分配700m的内存,而用vs新建一个项目以相同代码只分配了20m内存,此问题导致我内存很简单的就被耗尽2G。 尝试new int没有此问题,因此怀疑是stl上有什么原因,但始终没有头绪。 各位能否根据相关经验帮我推测问题的可能原因么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Herro
2007-08-10
打赏
举报
回复
哈哈哈,我找到问题原因了,是gflags这个内存调试工具导致
谢谢楼上上的
Herro
2007-08-10
打赏
举报
回复
set容器是树形的,应该没有预分配吧?
关于编译选项,确认都是相同的
gfxiang
2007-08-10
打赏
举报
回复
stl容器类一般都是事先预留多分配一些空间,等不够用的时候再一定比率增加空间
你可以调用用set<int>::max_size()返回当前分配的空间大小,比较一下两个项目分配空间有什么不同。
同样的代码同样的编译器,怎么会有这么大的差别呢,我也觉得奇怪,是不是哪里设置了什么编译选项导致的?
C++系列第2:C++2.0(11+14+17+20)详解及多线程实战
90 5.5.1 RAII 与引用计数 90 5.5.2
std
::shared_ptr 90 5.5.3
std
::unique_ptr 91 5.5.4
std
::weak_ptr 91 第6章 C++2.0多线程原理与实战 93 什么是并发 93 并发的方式 93 为什么使用并发 95 线程简介 96 创建线程...
【C++
内存
管理侯捷】---学习笔记(上)primitives(
new
,delete...),
std
::allocator
第一讲 primitives 第二讲
std
::allocator
内存
分配的每一层面 两个最重要的函数 allocate:deallocate;
闭关之 C++ 并发编程笔记(二):同步、
内存
模型和原子操作
并令 future 准备就绪 可作为线程池的构件单元 若一项庞杂的操作能分解为多个子任务,则可把它们分别包装到多个
std
::packaged_task<> 实例之
中
,再传递给任务调度器或线程池 类模板
std
::packaged_task<> 具有成员...
三、哈希表(3):两个数组的交集
这道题目,主要要学会使用一种哈希数据结构:unordered_set,这个数据结构可以解决很多类似的问题。注意题目特意说明:输出结果
中
的每个元素一定是唯一的,也就是说输出的结果的去重的, 同时可以不考虑输出结...
BOOST开发指南
timer提供毫秒级的计时精度,内部是通过
std
::clock取时间的progress_timer自动打印某生命周期的执行时间原则上程序库的
代码
是不应该被用户修改的progress_display可以在控制台上显示程序的执行进度date_time库能很好...
C++ 语言
64,685
社区成员
250,491
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章