Долгосрочное время для программы на С ++ в Cygwin по сравнению с Linux - PullRequest
0 голосов
/ 09 марта 2012

У меня есть программа на С ++, которая требует очень много времени для запуска в Cygwin по сравнению с быстрой версией на машине с Linux. Я подумал, что это может быть проблема с памятью, и попытался напечатать используемую память, и вот что я вижу:

Linux

виртуальная память: 5072 КБ, размер резидентного набора (RSS): 1064 КБ

Cygwin

виртуальная память: 7672 КБ, размер резидентного набора (RSS): 108928 КБ

Может кто-нибудь помочь мне понять, что вызывает эту разницу? Cygwin работает на ноутбуке с 64-битными окнами и 3 ГБ памяти. Есть некоторый старый код "C", который делает malloc в программе. Поможет ли преобразование их в стандартные контейнеры с ++?

Ответы [ 2 ]

3 голосов
/ 09 марта 2012

Cygwin предоставляет уровень совместимости POSIX в Windows. Это должно быть медленнее, чем код, созданный для родной ОС CRT.

Если ваш код является стандартным C или C ++, перекомпилируйте его с MSVC или MinGW / GCC, а затем сравните его.

С другой стороны, malloc против new не является проблемой. Распределение кучи стоит дорого.

Что может быть важно, так это то, что выделение кучи Windows в целом обходится дороже, чем реализация Linux. Эффект этой разницы зависит от вашего кода.

0 голосов
/ 09 марта 2012

Поскольку rubenvb говорит, что вы не можете сказать, не видя код - но:

Объем памяти не имеет значения, возможно, что либо средство запуска cygwin, либо ОС решит просто выделить многопамять о работе Cygwin, потому что эта память не используется.Таким образом, будущие выделения памяти приложением cygwin будут выполняться быстрее.Существует также проблема, связанная с тем, как Linux сообщает об использовании памяти, так как она выполняет оптомистическое распределение, поэтому, если вы выделяете, например, ГБ памяти, память фактически не привязана к этому процессу до тех пор, пока она не будет использована, и задача не будет отображаться как использующая 1 ГБ.

Есть некоторые задачи, которые очень дешевы в системе Unix, но очень медленны в архитектуре Windows.Самый печально известный это fork (), который очень распространен в приложениях Unix, но плохая идея в Windows

...