相关疑难解决方法(0)

哪种内存分配算法最适合性能和时间关键的c ++应用程序?

我问这个问题,以确定哪种内存分配算法可以为性能关键应用程序(如游戏引擎或嵌入式应用程序)提供更好的结果.结果实际上取决于内存碎片的百分比和内存请求的时间决定性.

教科书中有几种算法(例如Buddy内存分配),但也有其他像TLSF.因此,关于可用的内存分配算法,哪一个是最快的并且导致更少的碎片.顺便说一句,垃圾收集者不应包括在内.

还请注意,这个问题不是关于分析,它只是为了找出给定要求的最佳算法.

c++ performance memory-management memory-fragmentation

15
推荐指数
2
解决办法
2万
查看次数

Linux和gcc 4中的C++ new运算符线程安全性

不久,我将开始使用共享内存开发并行版本的网格细化算法.

该大学的一位教授指出,我们必须非常小心线程安全,因为编译器和stl都不是线程感知的.

我搜索了这个问题,答案取决于编译器(有些尝试有点线程感知)和平台(如果编译器使用的系统调用是否是线程安全的).

那么,在linux中,gcc 4编译器为new运算符生成线程安全的代码?

如果没有,解决这个问题的最佳方法是什么?也许锁定每个呼叫到新的运营商?

c++ linux gcc thread-safety

14
推荐指数
2
解决办法
1万
查看次数

C++分配的奇怪减速

有人可以告诉我为什么会发生以下事情:

我有2台电脑:

  1. 我的工作补偿
  2. 服务器

我维护C++程序(msvc 2005 c ++编译),它只在服务器上运行得太慢,但在我的comp上却没有.

我进行了测量(GetThreadTimes等)并且肯定可以说是狭窄的地方 - 它的内存分配(new/malloc).它只发生在服务器上!

我可以声称它是由于内存碎片而发生的,因为第一次服务器程序实例工作正常,只有在数据重新加载到内存(1-1.5百万分配/释放)后才开始在allocs上失去时间.

如果由于两台计算机(我的comp和服务器)上的内存碎片而看到相同的行为,我不会感到惊讶,但我看到的是:1).在我的comp分配上需要约5%的时间(不完全但有些像这样)2).在服务器上,这些分配需要大约75%的时间

怎么会发生这种情况?什么可能会减慢服务器计算机上的C++分配速度,同时它可以用于我的工作站.哪里可能有区别?它可能与OS级内存管理功能有关吗?因为C++级别管理器在两种情况下都是一样的.

以下是两种配置:

1).我的电脑(其中alloc占用约5%):

OS Name:                   Microsoft Windows 7 Enterprise 
OS Version:                6.1.7600 N/A Build 7600
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Member Workstation
OS Build Type:             Multiprocessor Free
Registered Owner:          Windows User
Original Install Date:     16/09/2011, 19:37:43
System Boot Time:          05/04/2013, 11:58:11
System Model:              7304A58
System Type:               x64-based PC
Processor(s):              1 Processor(s) Installed.
                           [01]: Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~2642 Mhz
Windows Directory:         C:\Windows …
Run Code Online (Sandbox Code Playgroud)

c++ memory allocation memory-fragmentation

9
推荐指数
1
解决办法
318
查看次数

可扩展的内存分配器体验

我目前正在评估一些可扩展的内存分配器,即nedmalloc和ptmalloc(都建立在dlmalloc之上),作为默认malloc/new的替代品,因为在多线程环境中存在明显的争用.他们公布的表现似乎很好,但是我想检查一下真正使用它们的其他人的经历.

  • 您的绩效目标是否满足?
  • 您是否遇到任何意外或难以解决的问题(如堆损坏)?
  • 如果你已经尝试了ptmaalloc和nedmalloc,你会推荐哪两个?为什么(易用性,性能)?
  • 或者您可能会推荐另一个可扩展的分配器(免费提供允许的许可证)?

c++ winapi memory-management multicore

8
推荐指数
1
解决办法
4774
查看次数

为什么带线和不带线没有明显区别?

我想评估Java线程功能。

  1. 我创建了一个没有线程的演示,如下所示:

    import java.util.*;
    
    public class NoThread {
    
        public static void main(String[] args) {
            NoThread Obj= new NoThread();   
            Date BeforeDate = new Date();
    
            Obj.run();
    
            Date AfterDate = new Date();
            Double Time_Consume = (AfterDate.getTime()- BeforeDate.getTime())/1000.0;
    
            System.out.println("Time Consume= " + Time_Consume + " Seconds"  );
        }
    
        public void run() {
            String tmp = "";
            for (int i = 0; i < 100000; i++) {
                tmp += i;
            }   
        }
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
    Cons
    
    ole display: Time Consume= 4.771 Seconds
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我用线程创建了一个演示。

    import java.util.Date;
    
    public class …
    Run Code Online (Sandbox Code Playgroud)

java multithreading

6
推荐指数
1
解决办法
149
查看次数