- 主题:c++有没有空转(dry run)的办法?
现在有个c++程序,对不同的输入耗费的内存(不一定是主机上的内存)不一样,非得跑一遍才能知道。有没有办法让程序先空转一遍,得到需要的内存量,确定内存不会爆掉之后再真正地送上去跑?
更新:希望以后gcc或其他的compiler能有这么个功能:生成一组配套的程序或者库,里面记录所有的malloc和dealloc,但跳过所有的计算部分,这样就在正式运行前空转一下就知道要消耗多少内存,而且查内存泄漏也方便多了。
--
修改:xibaomo FROM 73.170.143.*
FROM 73.170.143.*
这跟dev环境有啥关系?研发又不能把产线情况都遍历一遍
【 在 ziqin 的大作中提到: 】
: 你们没有dev环境的吗?
--
FROM 73.170.143.*
在我的场景里内存没办法预估,好比一个快递仓库,有的用户就存个小手包,有的就要存个钢琴,有的就要存个火箭。如果我的仓库的容量就是一个火箭,那么如果已经有一个火箭了,再送来什么都得等火箭送出去了再说。如果把每个包裹都当做火箭处理,那仓库效率就太低了。
【 在 foliver 的大作中提到: 】
: 内存消耗应该是一个事先都能估计好数据,为啥还要运行才知道?
: 比如我以前做配置,会根据各种输入比如用户数/用户行为等,估算出需要的内存和CPU数量,也就是能力建模。
:
--
FROM 73.170.143.*
你说的挂数据库是指写到硬盘?
我所关心的是一个计算任务能否有足够空间运行,但问题是不运行一遍我就不知道到底要多少内存。而且实际上“内存”也并不是主机内存,而是计算设备的内存
【 在 gpmn 的大作中提到: 】
: 不能挂数据库?非得挂内存?
: 你说的方案在生产环境完全不可接受。
:
--
FROM 73.170.143.*
你这种做法大概只适合于对精度要求不高的消费群体,在产线上完全不可接受,如果新老程序给出的结果不一样咋办?
【 在 here080 的大作中提到: 】
: 生产实践的标准操作:
: 1%流量给新程序,99%流量给老程序,观察效果。
: 然后估计新程序100%时会是什么效果。
: ...................
--
FROM 73.170.143.*
向后兼容向来都是big pain in the ass...
目前能做的就是major version保证兼容,其他的就不管了。
但话说回来,即便是同一版本,跑在不同的CPU上结果都会有所不同,GPU和CPU就完全不同
【 在 here080 的大作中提到: 】
: 你的新老程序给出结果不一样怎么办?
: 你们新老程序换代过程中没有兼容性考虑的?
: 还是说,你只需要对同一客户同一时间给出的结果自洽?
: ...................
--
FROM 73.170.143.*
这是计算设备不同导致的精度问题
【 在 here080 的大作中提到: 】
: 这是计算原理导致的还是程序设计问题?
:
--
FROM 73.170.143.*
打个比方,设备上的总内存就16G,有的任务占用8G,有的12G,有的15G。。。
如果现在设备上已经跑了个8G的任务,这时候来了个新任务,但我不知道它要消耗多少内存,无脑送上去,结果它要占用12G,那这个任务连带正在跑的都要crash
所以在送上去之前我要知道这个任务到底要消耗多少,12G的不行,就先放到一边,后面要是有6G的,就可以先送上去。
这个跟压力测试有啥关系?
【 在 wuyeguo 的大作中提到: 】
: 压力测试?
:
: #发自zSMTH@KB2000
--
FROM 73.170.143.*
空转没啥诡异的,make就有这功能
【 在 lipp 的大作中提到: 】
: “空转一遍”是诡异的说法。你确认你在讨论图灵机?
:
--
FROM 73.170.143.*
对普通消费群体当然无所谓,但对于制造业产线就有所谓,更何况下游还有可能放大
【 在 here080 的大作中提到: 】
: 那就是原理决定的。那这种不同有关系吗?无所谓吧。
:
--
FROM 73.170.143.*