- 主题:c++有没有空转(dry run)的办法?
不行啊,不把任务跑一遍没法知道到底new了多少内存。可如果new失败,正在设备上跑的任务也要crash
。
你说的确实有道理,耗费的内存不光是new的那些。不过这个好办,在new的总量上加点冗余就行了。
【 在 gluon521 的大作中提到: 】
: 不能加个计数器之类的东西实时统计吗,看着快满了就处理一下。
: 否则应用场景不同的话,也许你空转一遍的内存和真实场景的内存量也会不同。
:
--
FROM 73.170.143.*
好奇问一下,假设存在这样的空转机制,你来了一个新任务,先做空转,然后发现没有足够的内存,那你会怎么处理这个新任务?
--
FROM 123.123.45.*
放到一个优先队列里,一旦设备上有空闲了就先看看优先队列有没有能提交的,没有再去普通队列里看看
【 在 ad6623 的大作中提到: 】
: 好奇问一下,假设存在这样的空转机制,你来了一个新任务,先做空转,然后发现没有足够的内存,那你会怎么处理这个新任务?
--
FROM 73.170.143.*
服务程序没法确保内存不会爆掉吧,尤其是大数据量的,必须要处理内存不足的情况(预分配一个池子也是个办法),不处理的话只能是在服务程序的外部加watchdog。
内存不足是可以模拟的,直接让malloc/new失败就行,一般的allocator库或者profiler工具应该能模拟的,即使不能模拟,都是开源的,改改malloc就行了。
--
修改:z16166 FROM 125.35.121.*
FROM 125.35.121.*
做个stub
【 在 xibaomo 的大作中提到: 】
: 现在有个c++程序,对不同的输入耗费的内存(不一定是主机上的内存)不一样,非得跑一遍才能知道。有没有办法让程序先空转一遍,得到需要的内存量,确定内存不会爆掉之后再真正地送上去跑?
: 更新:希望以后gcc或其他的compiler能有这么个功能:生成一组配套的程序或者库,里面记录所有的malloc和dealloc,但跳过所有的计算部分,这样就在正式运行前空转一下就知道要消耗多少内存,而且查内存泄漏也方便多了。
--
FROM 106.3.194.*
1. 如果计算设备被多个进程使用,内存池怎么办?
2. 不像服务器内存,爆掉了还能写swap。计算设备没有swap,爆了就死给你看
【 在 z16166 的大作中提到: 】
: 服务程序没法确保内存不会爆掉吧,尤其是大数据量的,必须要处理内存不足的情况(预分配一个池子也是个办法),不处理的话只能是在服务程序的外部加watchdog。
: 内存不足是可以模拟的,直接让malloc/new失败就行,一般的allocator库或者profiler工具应该能模拟的,即使不能模拟,都是开源的,改改malloc就行了。
--
FROM 73.170.143.*
为进程设置内存硬限不行吗?
【 在 xibaomo 的大作中提到: 】
: 现在有个c++程序,对不同的输入耗费的内存(不一定是主机上的内存)不一样,非得跑一遍才能知道。有没有办法让程序先空转一遍,得到需要的内存量,确定内存不会爆掉之后再真正地送上去跑?
:
: 更新:希望以后gcc或其他的compiler能有这么个功能:生成一组配套的程序或者库,里面记录所有的ma
: ..................
发自「今日水木 on iPhone XR」
--
FROM 124.64.16.*
当然不行,16G的设备上不能跑15G的任务会被用户骂死的
【 在 solrex 的大作中提到: 】
: 为进程设置内存硬限不行吗?
: 发自「今日水木 on iPhone XR」
--
FROM 73.170.143.*
你的方法对c++来说是不现实的,因为程序内部的状态变化也依赖于分配的内存里数值的变化。比如你先new一个数组,然后根据这个数组计算的值再new另一个数组。如果你第一个数组只计数不alloc,程序就会出错,根本得不到你想要的结果。
【 在 xibaomo 的大作中提到: 】
: 当然不行,16G的设备上不能跑15G的任务会被用户骂死的
: --
发自「今日水木 on iPhone XR」
--
FROM 223.72.80.*
除非你的程序仅仅在输入那一下进行alloc,后面是纯计算。那就很简单了,给程序加一个参数,输入加上这个参数时根据输入计算下alloc空间,然后直接返回需要的内存资源量就好了。
【 在 xibaomo 的大作中提到: 】
: 当然不行,16G的设备上不能跑15G的任务会被用户骂死的
: --
发自「今日水木 on iPhone XR」
--
FROM 223.72.80.*