Ограничение размера списка.
Код:
MaxListSize = Maxint div 16;
Интересно, это ограничение "забыли" убрать (мне так кажется модуль classes давно не менялся). Или в этом есть какой то смысл?
Меня, честно говоря такие "детские" объемы не устраивают, если я поставлю там просто maxint, как думаете - в будущем проблем не будет?
Цитата: 0nni
Меня, честно говоря такие "детские" объемы не устраивают
Класс TList позволяет создать набор из произвольного количества элементов:)
Код:
const
MaxListSize = Maxint div 16;
type
PPointerList = ^TPointerList;
TPointerList = array[0..MaxListSize - 1] of Pointer;
...
TList = class(TObject)
private
FList: PPointerList;
MaxListSize = Maxint div 16;
type
PPointerList = ^TPointerList;
TPointerList = array[0..MaxListSize - 1] of Pointer;
...
TList = class(TObject)
private
FList: PPointerList;
Нет, все без некоторой доработки увеличивать MaxListSize нельзя. Глянь вот сюда хотя бы:
Код:
procedure TList.Delete(Index: Integer);
var
Temp: Pointer;
begin
if (Index < 0) or (Index >= FCount) then exit;
//Error(@SListIndexError, Index);
Temp := Items[Index];
Dec(FCount);
if Index < FCount then
[COLOR="Red"]System.Move(FList^[Index + 1], FList^[Index],[/COLOR]//maxint*4 копировать за раз не получится =(
(FCount - Index) * SizeOf(Pointer));
if Temp <> nil then
Notify(Temp, lnDeleted);
end;
var
Temp: Pointer;
begin
if (Index < 0) or (Index >= FCount) then exit;
//Error(@SListIndexError, Index);
Temp := Items[Index];
Dec(FCount);
if Index < FCount then
[COLOR="Red"]System.Move(FList^[Index + 1], FList^[Index],[/COLOR]//maxint*4 копировать за раз не получится =(
(FCount - Index) * SizeOf(Pointer));
if Temp <> nil then
Notify(Temp, lnDeleted);
end;
Значит буду писать свой линейный список...
Пол часа назад я тоже так думал, если ты посмотришь исходники то поймешь что заблуждаешься (то же самое касается и TStringList).
[QUOTE=0nni]Задумал нечто грандиозное но маленькое.[/QUOTE] Стало быть пишу я на WinApi.
Ты знаешь как долго заполняется ListBox?!
Код:
SendMessage(list, LB_ADD, 0, Integer(lpztString));
А теперь попробуй сравнить:
Код:
For i := 0 to (MaxInt div 16) do ListBox1.Items.add('');
и
Код:
For i := 0 to (MaxInt div 16) do StringList.add('');
Я думаю тема закрыта.
0nni, если ты хочешь сделать список, который позволит соджержать большое количество элементов, то всё равно 2 ГБ памяти это предел, вернее 536870912 элементов типа Integer (или pointer). Это предел для любой 32 битной программы под Windows, а 64 битные программы Delphi не умеет компилить.
Цитата:
Delphi не умеет компилить.
fpc умеет =)
зы, "Убейся ап стенку" - это про меня =(
а какая среда то хоть? )
Что то я вчера не так посчитал видимо. Калькулятор тоже убью об стенку.