Каковы определения ограничений времени выполнения и ограничений времени компиляции? - PullRequest
0 голосов
/ 05 сентября 2018

С APUE

Многие из них были жестко запрограммированы в программы или были определены используя специальные методы. С различными усилиями по стандартизации, которые мы описали, более портативные методы теперь предоставляются для определения эти магические числа и пределы, определенные реализацией, в значительной степени улучшение переносимости программного обеспечения, написанного для UNIX окружающая среда.

Требуются два типа ограничений:

  1. Пределы времени компиляции (например, какое наибольшее значение у короткого целого числа?)

  2. Ограничения времени выполнения (например, сколько байтов в имени файла?)

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

...

Чтобы еще больше запутать вещи, , если определенный лимит времени выполнения не варьируется в данной системе, он может быть определен статически в заголовок. Однако, если он не определен в заголовке, Приложение должно вызвать одну из трех функций conf (которая мы опишем в ближайшее время), чтобы определить его значение во время выполнения.

Сначала мне кажется, что пределы времени компиляции определяются как те, которые могут быть определены в заголовках, а ограничения времени выполнения определяются как те, которые не могут.

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

Так, каковы определения ограничений времени выполнения и ограничений времени компиляции?

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

@ Тим нет. Представьте, что у вас есть система, к которой может быть подключено много файловых устройств. Любой из них может иметь свои собственные ограничения. Это может быть обнаружено только во время выполнения, так как во время компиляции вы не знаете, какое оборудование будет использоваться.

0 голосов
/ 05 сентября 2018

Лимит времени выполнения, скажем, полное имя пути, может зависеть от версии операционной системы.

Если вы хотите, чтобы ваша программа могла работать в старой системе с более короткими ограничениями имени пути (скажем, 128 символов), вы не хотели бы, чтобы она была искусственно ограничена в более новых системах с гораздо большими ограничениями (скажем, 4096) символов.

Единственный способ получить наилучшее поведение - это сделать системный вызов, чтобы определить текущий предел, или адаптировать ваш код так, чтобы он мог справляться с более длинными строками, если он их встречает, и правильно сообщать о системных ошибках, если слишком длинные пути передаются в более старые системы.

Как говорит PJ, вам все равно нужна некоторая гибкость, если у вас подключены различные файловые системы, которые налагают свои собственные ограничения, которые вы также должны корректно обрабатывать, но они часто находятся внутри ограничения, наложенного на всю систему.

В некоторой степени, если вы используете языки высокого уровня с динамическими длинами строк и т. Д., Вы изолированы от этих ограничений времени выполнения, но полезно понимать, что они существуют.

0 голосов
/ 05 сентября 2018

Ваше первоначальное определение уже правильно. Если вы можете использовать точное ограничение из заголовка, это означает, что для этой системы это ограничение времени компиляции. Это может быть ограничение времени выполнения в какой-либо другой системе, и в этом случае заголовок не предоставит статическое определение.

В качестве альтернативы вы можете думать о чем-либо, для чего существует функция, как ограничение времени выполнения; Конечно, на самом деле это постоянное значение в некоторых системах, но для переносимого кода вам в любом случае нужно использовать функцию, так что это ограничение времени выполнения, которое на самом деле оказывается очень дешевым для проверки в некоторых системах (где функция может быть определено для возврата статического значения).

Дело в том, что нет одного точного ответа; некоторые вещи условно выполняются или компилируются в зависимости от системы, некоторые всегда выполняются во время компиляции, некоторые всегда выполняются. Это диаграмма Венна.

...