Что такое библиотека времени выполнения C?

Вероятно, вы просто получаете переполнение стека. Массив слишком велик, чтобы вставлять адресное пространство стека вашей программы.

Если вы выделяете массив в куче, вы должны быть в порядке, если у вас достаточно памяти.

int* array = new int[1000000];

Но помните, что это потребует от вас delete[] массива. Лучшим решением было бы использовать std::vector<int> и изменить его размер до 1000000 элементов.

143
задан jiggunjer 15 February 2017 в 10:40
поделиться

5 ответов

Да, libcmt - это (одна из нескольких) реализаций стандартной библиотеки C, поставляемой с компилятором Microsoft. Они предоставляют как «отладочную», так и «выпускную» версии трех основных типов библиотек: однопоточные (всегда статически связанные), многопоточные, статически связанные и многопоточные. -поточный, динамически связанный (хотя, в зависимости от версии компилятора, которую вы используете, некоторые из них могут отсутствовать).

Итак, в имени «libcmt» «libc» - это (более или менее) традиционное имя библиотеки C. «MT» означает «многопоточный». В «отладочной» версии в конце добавляется буква «d», что дает «libcmtd».

Что касается функций, которые он включает, стандарт C (часть 7, если вам интересно) определяет набор функций, которые должна предоставлять соответствующая (размещенная) реализация. Большинство поставщиков (включая Microsoft) сами добавляют различные другие функции (для совместимости, для обеспечения возможностей, которые не используются в стандартных функциях и т. Д.). В большинстве случаев он также будет содержать довольно много «внутренних» функций, которые используются компилятором. но обычно не конечным пользователем.

Если вы хотите получить полный список функций в «libcmt» (для использования в вашем примере), вы можете открыть одну из командных подсказок Visual Studio (обычно в «Инструменты Visual Studio»), переключиться в каталог, в котором ваши библиотеки были установлены, и введите что-то вроде: lib -list libcmt.lib , и он сгенерирует ( длинный ) список имен всех объектных файлов в этой библиотеке.Они не всегда соответствуют напрямую именам функций, но обычно дают представление. Если вы хотите просмотреть конкретный объектный файл, вы можете использовать lib -extract для извлечения одного из этих объектных файлов, а затем использовать dumpbin / symbols, чтобы найти, какие функции находятся в этом файле. конкретный объектный файл.

67
ответ дан 23 November 2019 в 22:21
поделиться

Если вы используете такой инструмент, как Dependency Walker для исполняемого файла, скомпилированного из C или C ++, вы увидите, что одна из библиотек DLL это зависит от MSVCRT.DLL. Это библиотека времени выполнения Microsoft C. Если вы дополнительно изучите MSVCRT.DLL с DW, вы увидите, что именно здесь работают все функции, такие как printf (), put (0, gets (), atoi () и т. Д.

6
ответ дан 23 November 2019 в 22:21
поделиться

C - это язык и По его определению, вам не обязательно должны быть доступны какие-либо функции. Никакого ввода-вывода, никаких математических операций и так далее. По соглашению вам доступен набор подпрограмм, которые вы можете связать со своим исполняемым файлом, но вам не требуется для их использования. Однако это настолько обычное дело, что большинство компоновщиков больше не просят вас ссылаться на библиотеки времени выполнения C.

Бывают случаи, когда они вам не нужны - например, при работе со встроенными системами может быть непрактично иметь malloc. Раньше я работал над встраиванием PostScript в принтеры, и у нас был собственный набор библиотек времени выполнения, которые были намного удобнее для встроенных систем, поэтому мы не беспокоились о «стандарте».

15
ответ дан 23 November 2019 в 22:21
поделиться

Существует три формы библиотеки времени выполнения C, поставляемой с Win32 SDK:

* LIBC.LIB is a statically linked library for single-threaded programs.
* LIBCMT.LIB is a statically linked library that supports multithreaded programs.
* CRTDLL.LIB is an import library for CRTDLL.DLL that also supports multithreaded programs. CRTDLL.DLL itself is part of Windows NT. 

32-разрядная версия Microsoft Visual C ++ также содержит эти три формы, однако CRT в DLL называется MSVCRT.LIB. DLL является распространяемой. Его имя зависит от версии VC ++ (например, MSVCRT10.DLL или MSVCRT20.DLL). Однако обратите внимание, что MSVCRT10.DLL не поддерживается в Win32, а CRTDLL.LIB поддерживается в Win32. MSVCRT20.DLL поставляется в двух версиях: для Windows NT и для Win32s.

см .: http://support.microsoft.com/?scid=kb%3Ben-us%3B94248&x=12&y=9

2
ответ дан 23 November 2019 в 22:21
поделиться

Я думаю, что определение Microsoft действительно означает:

Реализация Microsoft стандартной библиотеки времени выполнения C предоставляет ...

4
ответ дан 23 November 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: