相关疑难解决方法(0)

我怎样才能估计std :: map的内存使用情况?

例如,我有一个已知sizeof(A)和sizeof(B)的std :: map,而map里面有N个条目.你会如何估计它的内存使用量?我会说它就像是

(sizeof(A) + sizeof(B)) * N * factor
Run Code Online (Sandbox Code Playgroud)

但是因素是什么?可能不同的公式?

也许要求上限更容易?

c++ memory stl stdmap

42
推荐指数
4
解决办法
3万
查看次数

新的总是在C++/C#/ Java中分配在堆上

无论使用C++或C#还是Java,我的理解始终是当我们使用new关键字创建对象时,它会在堆上分配内存.我认为new只需要引用类型(类),并且原始类型(int,bool,float等)永远不会使用new并且总是在堆栈上(除非它们是实例化的类的成员变量)与new).不过,我一直在阅读信息,这让我怀疑这个长期存在的假设,至少对于Java和C#.

例如,我刚注意到在C#中,new运算符可用于初始化值类型,请参见此处.这是规则的一个例外,该语言的辅助功能,如果是,那么还会有哪些其他例外?

有人可以澄清一下吗?

c# c++ java memory memory-management

13
推荐指数
3
解决办法
1万
查看次数

std :: map分配错误

我面临着std :: map的问题。出于未知原因,有时插入映射会导致“分配错误”异常。

以下是我用于插入地图的函数。

BOOL Add2WaitList(Object<LPVOID> *newObj)
{
    try
    {
        _set_se_translator( trans_func );
        m_syncWQ.Lock();
        if (m_waitingQueue.count(newObj->uid)>0)
        {
            m_syncWQ.Unlock();
            return FALSE;
        }
        m_waitingQueue[newObj->uid] = *newObj; <-- failing here
        m_syncWQ.Unlock();
        return TRUE;
    }
    catch(std::exception &ex){
        ...
    }
    catch(SE_Exception &e){
        ...
    }
    catch(...){
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何解决吗?

注意:我无法确定重现它的步骤。

提前THX!

添加有关对象和地图的详细信息:

template <typename T>
struct Object{
public:
    void Kill()
    {
        if (response!=NULL)
            delete response;
        if (object!=NULL)
            delete object;
    }

    enum objType;
    std::string uid;
    enum status;
    double p;
    enum execType;
    T object;
    LPVOID response;
}; …
Run Code Online (Sandbox Code Playgroud)

c++ stdmap bad-alloc

5
推荐指数
1
解决办法
3721
查看次数

标签 统计

c++ ×3

memory ×2

stdmap ×2

bad-alloc ×1

c# ×1

java ×1

memory-management ×1

stl ×1