Почти все компиляторы C ++ будут компилировать код на C.
Я бы порекомендовал использовать Microsoft Visual Studio. Есть бесплатная версия этого.
Большинству программистов на C нравится иметь свой собственный редактор и выбирать компилятор, который подходит для их проекта. Вот почему вы можете скачать несколько разных компиляторов для C, а не столько встроенных в IDE напрямую.
Легко использовать редакторы, такие как Editplus или даже Блокнот. Некоторые из более интересных редакторов имеют подсветку синтаксиса и могут запускать команды в командном окне для вас.
В среде IDE обычно также поддерживается несколько языков. Поэтому, когда вы устали от C и хотите перейти на Python, Java, C ++, некоторые IDE могут помочь вам в этом. Я хотел бы взглянуть на них:
Ваш пример хэш-таблиц действительно является ключевой структурой базы данных, которая принесет пользу. Вместо того, чтобы загружать в память целый файл размером 4 ГБ или более для проверки значений, SSD можно проверять напрямую. SSD по-прежнему на порядки медленнее ОЗУ, но вполне разумно иметь хеш-таблицу на 50 ГБ на диске, но не в ОЗУ, если только вы не платите большие деньги за большое железо.
Примером являются базы данных шахматных позиций. У меня более 50 ГБ хешированных позиций. Существует сложный код, чтобы попытаться сгруппировать связанные позиции рядом друг с другом в хэше, поэтому я могу листать по 10 МБ таблицы за раз и надеяться повторно использовать некоторые из них для нескольких похожих запросов о положении. Чтобы сделать это эффективным, требуется масса кода и сложности.
Заменен на SSD, Я смог отбросить всю сложность кластеризации и просто использовать действительно глупые рандомизированные хеши. Я также получил повышение производительности, так как я беру с диска только те данные, которые мне нужны, а не большие куски по 10 МБ. Задержка действительно больше, но чистое ускорение значительно ... а сверхчистый код (20 строк, а не 800+), возможно, даже лучше.
Ipso facto, любой алгоритм, который вы можете придумать, требует большого количества случайных операций ввода-вывода с диска (ключевое слово random, которое помогает донести принцип локальности до птиц, тем самым устраняя полезность продолжающегося кэширования).
Я видел, что некоторые системы баз данных извлекают выгоду из этого. MySQL, например, с использованием механизма хранения MyISAM (где записи данных в основном являются прославленными CSV). Однако я думаю, что очень большие хэш-таблицы будут лучшим выбором для хороших примеров.
SSD значительно быстрее только при произвольном доступе. Последовательный доступ к диску, они всего в два раза производительнее обычных ротационных дисков. Многие твердотельные накопители имеют более низкую производительность во многих сценариях, из-за чего они работают хуже, как описано здесь .
Хотя твердотельные накопители действительно значительно перемещают иглу, они по-прежнему намного медленнее, чем операции процессора и физической памяти. Для вашего примера хеш-таблицы 4 ГБ вы можете поддерживать 250+ МБ / с на SSD для доступа к сегментам случайной хеш-таблицы. Для вращательного привода вам повезет, если вы превысите однозначное значение МБ / с. Если вы можете сохранить эту хеш-таблицу размером 4 ГБ в памяти, вы сможете получить к ней доступ со скоростью порядка гигабайт в секунду - намного быстрее, чем даже очень быстрый SSD.
В упомянутой статье перечислены несколько изменений, внесенных MS для Windows 7 при работе на SSD, что может дать вам представление о том, какие изменения вы могли бы рассмотреть. Во-первых, отключена функция SuperFetch для предварительной выборки данных с диска - она предназначена для уменьшения времени произвольного доступа к диску, которое снижается за счет твердотельных накопителей. Дефрагментация отключена, поскольку файлы, разбросанные по диску, не снижают производительность SSD.
Некоторые личные мнения, но я считаю, что лучше НЕ :
использовать устаревшие модули (использовать для них предупреждения)
чрезмерное использование классов и наследования (типично для возможно, унаследованные статические языки)
явно используют декларативные алгоритмы (как итерация с для
по сравнению с использованием
itertools
)
переопределение функций из стандартной библиотеки, «потому что мне не нужны все эти функции»
с использованием функций ради них (снижение совместимости со старыми версиями Python)
с использованием метаклассов, когда вам действительно не нужно и в более общем плане делать вещи слишком "волшебными"
избегайте использования генераторов
(более личный) попробуйте микрооптимизировать код CPython на низкоуровневой основе. Лучше потратьте время на алгоритмы, а затем оптимизируйте, создав небольшую разделяемую библиотеку C, вызываемую ctypes
(так легко получить 5-кратное повышение производительности во внутреннем цикле)
, используйте ненужные списки, когда достаточно итераторов
запрограммируйте проект непосредственно для 3.x до того, как все необходимые библиотеки станут доступны (сейчас этот момент может быть немного спорным!
Не обманывай себя. SSD по-прежнему намного медленнее, чем системная память. Любой алгоритм, который предпочитает использовать системную память вместо жесткого диска, все равно будет намного быстрее, при прочих равных.