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

 
Возможно ли как-то узнать, сколько выделено элементов под массив с учетом Reserve-параметра?
 
fxsaber #:
Возможно ли как-то узнать, сколько выделено элементов под массив с учетом Reserve-параметра?
https://www.mql5.com/en/forum/459954
How to find out the reserved memory of a dynamic array?
How to find out the reserved memory of a dynamic array?
  • 2024.01.04
  • www.mql5.com
I'm talking about memory reserved using the third parameter of the ArrayResize function...
 
Dmitriy Skub #:
Ты мне не тычь. Во-вторых, посмотри значение ИМХО.

Значение ИМХО и так знаю, и это никак тебе не дает права выражать общее мнение, чего тебе не доверяли. А про "тычь" - если с чсв проблем нет, то и с "ты" не должно быть.

 

такие штуки в редакторе сильно раздражают, проще поделить на 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[] ); // Возвращает реальное количество выделенных элементов под массив.

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