Tôi có một chương trình sử dụng rất nhiều std::map
. Trong Windows, nhiều bộ nhớ hơn được sử dụng như dưới Linux. Có ai có ý tưởng tại sao điều này xảy ra không?sử dụng bộ nhớ cấu trúc dữ liệu STL, cửa sổ so với linux
Linux: Last process took 42.31 s and used not more than 909 MB (RSS 900 MB) of memory
Windows: Last process took 75.373 s and used not more than 1394 MB (RSS 1395 MB) of memory
tôi sử dụng gcc 4.4.3 và trình biên dịch C++ VS 2010 trên dòng lệnh, với các thiết lập phát hành.
EDIT: Xin lỗi vì trả lời những câu hỏi mà muộn ...
Mã này trông như thế này:
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;
};
Toàn bộ điều mô tả một cấu trúc đồ thị, có thể tổ chức một số thuộc tính trên các nút của nó và các cạnh. Value
chỉ là một lớp cơ sở và các lớp dẫn xuất có thể chứa các giá trị với các loại tùy ý, như int
hoặc std::string
.
EDIT 2: Dưới Windows, tôi sử dụng những lá cờ sau: -DRELEASE -DNDEBUG -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DNOMINMAX /O2 /MD /Gy /EHsc
EDIT 3: Việc sử dụng bộ nhớ được đọc từ một tập tin/proc dưới Linux (như memuse
). Trong Windows, một số hàm WinAPI được gọi, nhưng tôi không phải là chuyên gia cho điều này, vì vậy đó là tất cả những gì tôi có thể nói về nó.
EDIT 4: Sử dụng /GS-
và -D_SECURE_SCL
kết quả trong Last process took 170.281 s and used not more than 1391 MB (RSS 1393 MB) of memory
Bạn đang sử dụng Visual Studio? Nếu có, phiên bản nào? Bạn đang gỡ lỗi? – msandiford
Bạn đo mức sử dụng bộ nhớ như thế nào? – camh
Mã hoặc nó không xảy ra. – Puppy