Ошибки, баги, вопросы - страница 3712

 

такие штуки в редакторе сильно раздражают, проще поделить на 5 include, что там за проекты такие что в include не помещаются функции в которые раз в месяц заглядываешь, делать в них просто нечего уже

а вот подсветка выделенного это очень хорошо


если писать таких проекты что надо между 10 функциями постоянно мотаться, то вы профи, так и используйте проф. редактор, зачем тут это городить

 
К сожалению, это грубая оценка.
 
fxsaber #:
К сожалению, это грубая оценка.

Я подозреваю, что штатного способа нет.

Но, как отметил Alain Verleyen, при желании это можно самому отслеживать из кода.

Грубо говоря, завести счетчик, который будет хранить актуальное количество зарезервированых элементов. Инициализировать нулем и обновлять каждый раз при вызове ArrayResize, исходя из текущего значения переменной и передаваемых в ArrayResize значений. Придется массив в класс оборачивать, а размер изменять только с помощью специального метода, который, кроме вызова ArrayResize, обновляет счетчик зарезервированных "элементов". В общем, в теории можно, но сложно, громоздко и будут трудности с тем, чтобы переобуть существующий код. Звучит как нецелесообразная затея только лишь для того, чтобы знать количество зарезервированных элементов. Проще, наверное, поглядывать на MQL_MEMORY_USED если есть повод беспокоиться о памяти.

 
Vladislav Boyko #:
Грубо говоря, завести счетчик, который будет хранить актуальное количество зарезервированых элементов. Инициализировать нулем и обновлять каждый раз при вызове ArrayResize, исходя из текущего значения переменной и передаваемых в ArrayResize значений. Придется массив в класс оборачивать, а размер изменять только с помощью специального метода, который, кроме вызова ArrayResize, обновляет счетчик зарезервированных "элементов". В общем, в теории можно, но сложно, громоздко и будут трудности с тем, чтобы переобуть существующий код. Звучит как нецелесообразная затея только лишь для того, чтобы знать количество зарезервированных элементов. Проще, наверное, поглядывать на MQL_MEMORY_USED если есть повод беспокоиться о памяти.

Ну, к стати, можно упростить (с потерей точности). Я в третий параметр всегда передаю одинаковое значение, которое храню константой:

#define SOME_ARR_RESERVE_SIZE 345

При условии, что SOME_ARR_RESERVE_SIZE будет передаваться в третий параметр для абсолютно каждого вызова ArrayResize, вам достаточно просто хранить максимальный размер массива. В таком случае вы будете знать, что под массив выделено от maxArrSize до (maxArrSize + SOME_ARR_RESERVE_SIZE) элементов.

 
Vladislav Boyko #:
от maxArrSize до (maxArrSize + SOME_ARR_RESERVE_SIZE)
Там плюсминус 1. Я когда-то задавался этим вопросом, но я уже не помню, что я тогда выяснил.
 
Vladislav Boyko #:

В общем, в теории можно, но сложно

Спасибо. Наверное, это неправильно, что нормального способа нет.
int ArraySizeReserve( void &Array[] ); // Возвращает реальное количество выделенных элементов под массив.
 

fxsaber #:
Спасибо. Наверное, это неправильно, что нормального способа нет.

int ArraySizeReserve( void &Array[] ); // Возвращает реальное количество выделенных элементов под массив.

Было бы круто, если бы добавили что-то подобное. Это одна из моих старых хотелок, которую я не озвучивал.

 
Vladislav Boyko # :

Было бы круто, если бы добавили что-то подобное. Это одна из моих старых хотелок, которую я не озвучивал.

Что делать ?

У вас есть конкретный пример использования?

 
Alain Verleyen #:
У вас есть конкретный пример использования?

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

Personally, I have not yet experienced any urgent need for this. But if we imagine that there is some large array whose size can change both up and down, then it will not be possible to find out the actual memory consumption of the array without significant changes to the code.

 
Alain Verleyen #:
У вас есть конкретный пример использования?
Я согласен, что всегда можно обойтись без той функции. Но если бы такая функция была, то хуже бы точно не стало.