использование памяти структурами данных STL, Windows и Linux

У меня есть программа, которая интенсивно использует std :: map . В Windows используется гораздо больше памяти, чем в Linux. Кто-нибудь знает, почему это происходит?

Linux: Последний процесс занял 42,31 с и использовал не более 909 МБ (RSS 900 МБ) памяти

Windows: Последний процесс занял 75,373 с и использовал не более 1394 МБ (RSS 1395 МБ) памяти

Я использую gcc 4.4.3 и компилятор VS 2010 C ++ в командной строке с настройками выпуска.

РЕДАКТИРОВАТЬ. : Извините за столь поздний ответ на вопросы ...

Код выглядит следующим образом:

enum Symbol {
    ...
}

class GraphEntry {

    public:

    ...

    virtual void setAttribute (Symbol name, Value * value) = 0;

    const Value * attribute (Symbol name) const;

    private:

    std::map<Symbol, Attribute> m_attributes;
};

class Attribute {

    public:

    Attribute (Symbol name, Value * val);

    ...

    Symbol name () const;

    Value * valuePointer () const;

    void setValuePointer (Value * p);

    private:

    Symbol m_name;

    Value * m_value;
};

class Graph : public GraphEntry {

    ...

    public:

    Node * newNode (...);

    Graph * newSubGraph (...);

    Edge * newEdge (...);

    ...

    setSomeAttribute (int x);

    setSomeOtherAttribute (float f);

    ...

    private:

    std::vector<GraphEntry *> m_entries;
};

Все это описывает структуру графа, которая может содержать некоторые атрибуты на своих узлах и краях. Значение - это просто базовый класс, а производные классы могут содержать значения с произвольными типами, например int или std :: string .

РЕДАКТИРОВАТЬ 2: Под Windows я использую следующие флаги: -DRELEASE -DNDEBUG -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DNOMINMAX / 3 Использование памяти считывается из файла / proc под Linux (например, memuse ). Под Windows вызываются некоторые функции WinAPI, но я не эксперт в этом, так что это все, что я могу сказать об этом.

РЕДАКТИРОВАТЬ 4: Использование / GS- и -D_SECURE_SCL приводит к Последний процесс занял 170,281 с и использовал не более 1391 МБ (RSS 1393 МБ) памяти

11
задан swegi 15 November 2010 в 10:15
поделиться