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

 
Alexey Navoykov:
А разве текущий 0 не так работает?
 
Комбинатор:
А разве текущий 0 не так работает?

Ну по идее это означает нулевой резерв. А лишняя память наверно утилизируется.  Вообще там много неясностей с этим, мы не можем узнать реальный размер выделенной памяти под массив, чтоб проверить это и оптимизировать работу.

 
Или вот допустим такой случай.  Сначала ArrayResize(arr, 10, 100);   Потом ArrayCopy(arr, arr2, 0, 0, 20);   Уменьшится ли размер зарезервированной памяти под массив?
 
Alexey Navoykov:

Если я правильно помню объяснения, резервный размер не уменьшится даже если ему явно указать меньшее число.

Неправильно. Судя про примеру из справки, 0 работает действительно как 0 и тогда предложение про -1 очень даже логично.

 
Кстати, я не совсем корректно рассуждал насчёт reserve_size. Ведь по сути это просто шаг изменения резерва, но не сам резерв.  Т.е. он скорее всего нигде не хранится.  А вот общий размер выделенной памяти известен.  Вот его бы нам хотелось как-то знать, а в идеале управлять им непосредственно.

А предложение про ArrayResize я переформулирую так:  нужно чтобы при задании reserve_size=-1 функция не меняла выделенный размер памяти под массив, если параметр size лежит в пределах этого диапазона.   Если же size > capacity, то само собой буфер увеличится.
 
В массиве ("внутри") хранится allocated - под сколько элементов массив распределён.

Логика работы с резервом(условный код):
ArrayResize(arr,int size,int reserve)
  {
   if(arr.allocated<size)
      if(!ArrayAllocateMemory(arr,size+reserve))  // -> arr.allocated=size+reserve;
         return(-1);
   //---
   CallConstructorsOrDestructors(arr,size);
   //---
   arr.size=size;
   return(size);
  }
 
Ilyas:
В массиве ("внутри") хранится allocated - под сколько элементов массив распределён.

Логика работы с резервом(условный код):

Ясно, спасибо.  А в самом начале этот allocated равен -1, или нет?  Т.е. при первоначальном вызове ArrayResize(arr, 0, 100) аллокация будет?  

 
Alexey Navoykov:

А в самом начале этот allocated равен -1, или нет?

Равен 0
Alexey Navoykov:

Т.е. при первоначальном вызове ArrayResize(arr, 0, 100) аллокация будет?  

Аллокация происходит, только если размер массива меняется в большую сторону. В данном случае, размер массива не меняется, т.к. он был равен 0

 
FVitalii Ananev:
Разница в том, что в первом случае ошибки нет :)
А в С\С++ почему в обоих случаях ошибки нет? (Ответ на вопрос при чем здесь С\С++ см. выше)
 
Как удалить URL из списка разрешённых адресов? В хелпе написано: "To delete an address from the trusted list, select it and press "Delete" button", но там нет этой кнопки.