Вам нужно открыть консоль (option + cmd + J
на Mac и Chromium), а не источник. Затем вы можете захотеть взглянуть на вкладку Sources
и попытаться найти Javascript (файл или из HTML (здесь index.php
), отвечающий за то, что вы хотите отлаживать. Однако для этого самого сайта кажется, что Calculate делает вызов сервера для выполнения расчета.
Только вектор
гарантированно имеет непрерывную память. Не остальные.
realloc
- это функция управления памятью C. Его использование не приветствуется в коде C ++. Вот что говорит Страуструп: Почему в C ++ нет эквивалента realloc ()?
Однако realloc () гарантированно будет работать только с массивами, выделенными malloc () (и аналогичными функциями), содержащими объекты без определяемые пользователем конструкторы копирования. Также, пожалуйста, помните, что вопреки наивным ожиданиям, realloc () иногда копирует свой массив аргументов.
Одним из основных преимуществ std :: vector является то, что когда он перераспределяет себя из естественного роста, он выбирает размер, который в 2 раза больше текущего размера (обычно - но всегда постоянный множитель). Это означает, что push_back'ы имеют амортизированную стоимость O (1).
Realloc даст вам более точный контроль над тем, как вы распределяете память, но с большой мощью приходит большая ответственность. Если все, что вы делаете, является эквивалентом push_back, и вы перераспределяете каждый раз, когда добавляете элемент, то есть потенциально операция O (N) для каждого добавления в массив.
Полагаю, это всего лишь вектор.
Я не видел никого, кто предложил бы использовать realloc в C ++.
Непрерывная память также гарантируется realloc, так что это не причина не использовать ее.
Однако я бы Я предпочитаю использовать вектор в C ++, поскольку он находится на более высоком уровне абстракции, поэтому он облегчает написание кода.
Единственная возможная причина, по которой я могу подумать об использовании realloc (over vector) для сценария типа массива, состоит в том, что грубая скорость. Это может быть быстрее. И я подчеркиваю слово «может» - мера, не угадай!
Однако, ты должен справиться со своими собственными перераспределениями, что требует больше работы. Я предпочел бы иметь код, который работает немного медленнее (конечно, при условии, что он все еще работает достаточно быстро), если я смогу доставить его и получить оплату быстрее.
Набор функций C (malloc, calloc, realloc, free) является необработанными операциями с памятью. Они будут создавать / изменять / освобождать данный буфер в памяти, но память не будет иметь типа, и конструкторы не будут вызываться.
C ++ не имеет эквивалента realloc , а только безопасных типов для malloc / free с помощью new / new [] и delete / delete [] . Версии C ++ будут получать память из системы и инициализировать ее, вызывая соответствующие конструкторы. Использование delete вызовет деструкторы объектов и затем освободит память. Версии C и C ++ несовместимы, если вы получаете память с помощью malloc (даже если вы вызываете конструктор на месте в полученной памяти), вы не можете освободить ее с помощью delete / delete [] как это неопределенное поведение.
Использование realloc в C ++ может быть небезопасным, поскольку это будет побитовое копирование объектов из одной области памяти в другую. Иногда ваши объекты не будут правильно обрабатывать движения памяти (скажем, что ваш объект имеет как атрибут, так и ссылку на него, после побитового перемещения его ссылка будет указывать на старую позицию, а не на реальный атрибут). Внутри вектора всякий раз, когда требуется увеличить память, новая память приобретается с помощью new [] , а затем все объекты копируются (или копируются) на новых позициях, используя соответствующие Операции C ++ перед удалением старых элементов.
Всякий раз, когда vector увеличивается в размере (зарезервированный размер, не используется размер), он создает новую область памяти и перемещает все объекты. С другой стороны, realloc переместит блок памяти в другую позицию только в том случае, если после указателя недостаточно непрерывного пространства, чтобы просто увеличить его . Векторы не уменьшают размер. Никогда. Когда вы очищаете элементы, зарезервированная память все еще удерживается.
Наконец, в векторе уровень абстракции выше, чем в realloc даже для типов POD (которые безопасно перемещать с помощью C- как конструкции). Эквивалентом вектора будет структура, которая содержит указатель на буфер памяти, количество используемых элементов и зарезервированный (размер буфера), а также набор функций, которые имеют дело с получением большего объема памяти при необходимости и обновлением индексы с каждой операцией.
Когда вы очищаете элементы, зарезервированная память все еще удерживается.Наконец, в векторе уровень абстракции выше, чем в realloc даже для типов POD (которые безопасно перемещать с помощью C- как конструкции). Эквивалентом вектора будет структура, которая содержит указатель на буфер памяти, количество используемых элементов и зарезервированный (размер буфера), а также набор функций, которые имеют дело с получением большего объема памяти при необходимости и обновлением индексы с каждой операцией.
Когда вы очищаете элементы, зарезервированная память все еще удерживается.Наконец, в векторе уровень абстракции выше, чем в realloc даже для типов POD (которые безопасно перемещать с помощью C- как конструкции). Эквивалентом вектора будет структура, которая содержит указатель на буфер памяти, количество используемых элементов и зарезервированный (размер буфера), а также набор функций, которые имеют дело с получением большего объема памяти при необходимости и обновлением индексы с каждой операцией.