我正在寻找一个分析器,以便找到我的C++代码中的瓶颈.我想找一个免费,非侵入性和良好的分析工具.我是一名游戏开发人员,我使用PIX for Xbox 360并发现它非常好,但它不是免费的.我知道英特尔VTune,但它也不是免费的.
我要求一个模板技巧来检测一个类是否具有给定签名的特定成员函数.
问题类似于这里引用的问题 http://www.gotw.ca/gotw/071.htm 但不一样:在Sutter的书中,他回答了C类必须提供成员函数的问题.一个特定的签名,否则程序将无法编译.在我的问题中,我需要做一些事情,如果一个类有这个功能,否则做"其他".
boost :: serialization面临类似的问题,但我不喜欢他们采用的解决方案:模板函数默认调用具有特定签名的自由函数(您必须定义),除非您定义特定的成员函数(在他们的情况下"序列化",它采用给定类型的2个参数)与特定签名,否则将发生编译错误.那就是实现侵入式和非侵入式序列化.
我不喜欢这个解决方案有两个原因:
我需要为没有该成员函数的类定义自定义行为,并且我的实体位于不同的名称空间内(我不想覆盖在一个名称空间中定义的全局函数,而我在另一个名称空间中)
你能给我一个解决这个难题的提示吗?
这是一个"难"的问题.我在网上找不到任何有趣的东西.
我正在为我的公司开发一个内存管理模块.我们为下一代游戏机开发游戏(Xbox 360,PS3和PC ......我们认为PC是控制台!).
我们将来需要为我们的下一个游戏处理大型游戏世界的纹理流,这些游戏世界无法在主控制台内存中加载(暂时不谈论PC).
我们将在纹理的开始高分辨率mipmap(即大约世界数据大小的70%)上进行流式处理.也许在未来我们还必须流式传输几何图形,更小的mipmap,音频等.
我正在为这个问题开发一个内存管理器,专注于X360(因为在PS3上我们可以使用主机内存和相关的自动碎片整理GMM分配器).
我面临的问题如下:我们已决定为纹理流保留一个特定的内存区域(例如64兆字节),我们希望处理该区域中的所有分配和解除分配.我们在应用程序开始时分配了区域,并且该区域在物理上保证是连续的(不仅仅是虚拟,因为我们需要在那里存储纹理).
我已经实现了一个自动碎片整理分配器,使用句柄而不是指针.时间不是问题,问题是内存碎片化.在游戏中我们不断加载和卸载流媒体目标,因此我们希望使用最大量的缓冲区(64兆字节).
使用这个分配器,我们可以使用所有分配的空间,但碎片整理程序在不可接受的时间内工作(有时是60毫秒,超过一帧!),而算法也不算太糟糕......有太多不可避免的memcpy!
我正在寻找解决这个问题的解决方案.我想找到一份好文章,或验尸报告,或者遇到同样问题的人.
现在我在两种策略之间进行选择:1)在专用线程上移动碎片整理例程(适用于具有6个线程的线程的X360,对于PS3而言只有一个新线程...而且不要告诉我使用SPU!)解决锁定区域的所有多线程问题,访问正在移动的区域的问题,... 2)找到碎片整理问题的"增量"解决方案:我们可以为每个帧提供时间预算(例如最多1毫秒)进行碎片整理并且内存管理器将在每帧预算中执行它所能做的事情.
有人可以告诉我他的经历吗?