Вы могли использовать wtime:
wtime [ -t task ] [ ]
-t task
Specify the name of the task. It has to be a valid file-
name. Only the first 32 characters are taken into account.
The default value is "default".
action is one of the following:
-h Display help.
-a Start counting.
-s Stop counting.
-c Display current elapsed time in seconds.
-r [ start [ end ]]
Display time spent on the task during the specified
period. The parametres start and end represent the
begginning and end of the reporting period respec-
tively. The format of start and end is '%d-%m-%Y'
(see strptime (1)). The default values are the cur-
rent time for end and the begginning of the current
month for the start parameter.
Это зависит от компилятора.
Например:
const int a = 4;
Это может быть обработано компилятором, выделяющим 4 байта и просто обеспечивающим неизменяемость.
Если у вас была постоянная строка:
static final java.lang.String name = "Foobar";
Компилятор может удалить переменную и заменить ее реальной строкой «Foobar» везде, где эта переменная используется. Это не занимает места из кучи, но все равно должно храниться где-то в сегменте данных программы. Java пытается сделать это, когда находит строку в кавычках, которая используется в нескольких местах, поэтому ей нужно сохранить только одну ее копию.
В любом случае константы не устраняют выделение памяти. В лучшем случае они могут только минимизировать необходимое хранилище.
Да, будет. Хотя, если вы никогда не возьмете его адрес, оптимизатор вполне может удалить его полностью и просто заменить любые ссылки на константу числом 5.
Это зависит.
const int a = 5;
Потребуется четыре байта памяти (или сколько байтов занимает int в вашей системе).
Если вы сделаете это статическим:
static const int a = 5;
Тогда оптимизатор может заменить каждый экземпляр a
значением 5. Оптимизатор не может сделать это в первом (нестатическом) случае просто потому, что вы можете сослаться на a
в отдельный блок компиляции с:
extern const int a;
Это может занять обычное количество, но если вы используете его только способами, которые никогда не требуют, чтобы он имел адрес, компилятор / компоновщик может оптимизировать его, чтобы он не занимал никакой памяти вообще.
Это зависит от вашей архитектуры, но да, если вы делаете something const или not на самом деле не влияет на его размер, а больше на его расположение в памяти. Теперь есть некоторые оптимизации компилятора, которые могут изменить то, что, по вашему мнению, действительно произойдет, но это основная идея.
Обычно константа занимает то же место, что и переменная, поэтому, если int в вашей архитектуре 32-битный, a также будет занимать 32-битное пространство. Однако компилятор может также решить напрямую поместить константу в код, вообще не выделяя место для самой константы. Это будет зависеть от того, где на самом деле определена константа, то есть от того, сможет ли компилятор определить, что нет возможности либо изменить a (например, с помощью константного приведения), либо взять адрес a.
Нет разницы в потреблении памяти между int a
и const int a
.
Однако обратите внимание, что в C объекты, объявленные как const
, не образуют постоянных выражений (в отличие от C ++) и имеют внешнюю связь по умолчанию (в отличие от C ++, опять же). Все это означает, что в C постоянный объект - это почти то же самое, что и непостоянный объект, только немодифицируемый.
Кроме того, это означает, что в C у константного объекта очень мало шансов быть «удаленным», как утверждают другие ответы. Если вы действительно хотите, чтобы он был «съемным» в C, вы должны явно объявить его как static
. Но даже в этом случае объект const int
не будет формировать постоянные выражения, т.е. вы все равно можете '
Во встроенной системе, где постоянная память отделена от записываемой памяти, эта константа не будет занимать ОЗУ, она будет храниться только в ПЗУ. Точно так же в системе с виртуальной памятью константы загружаются в страницы памяти только для чтения и занимают оперативную память только один раз, независимо от того, сколько запущенных копий программы имеется.
для постоянной переменной требуется 4 байта памяти, но если это значение, требуется 0 байтов, так как ассемблерный код будет вставлять здесь значение, подобное этому
mov eax, 5
5 не происходит от переменной, но является константой 5, и она даже будет генерировать более быстрый код, поскольку для получения значения не требуется вызова памяти, это просто часть ассемблерного кода