Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.09.2009, 11:13
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию Как освободить память, занимаемую ст. массивом

Привет всем!

Часто-часто пишут во всякого рода статьях о статических и динамических массивах. Но нигде не пишут, как же всё таки удалять эти статические массивы.

var M:array[0.99] of Cardinal;

Как мне это освободить?
__________________
Делаем'c разные игры. Искать на glscene.ru
Ответить с цитированием
  #2  
Старый 23.09.2009, 11:14
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Никак, на то он и статический.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 23.09.2009, 15:15
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Или же так... =)
Код:
type
  TStaticArray = array[0..255] of Byte;
  PStaticArray = ^TStaticArray;
var
  StaticArray: PStaticArray;
begin
  New(StaticArray);
  StaticArray^[25] := 25;
  StaticArray^[255] := 255;
  ShowMessage(IntToStr(StaticArray^[25] + StaticArray^[30] + StaticArray^[255]));
  Dispose(StaticArray);
end;
Ответить с цитированием
  #4  
Старый 23.09.2009, 20:02
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну так вы освободите память выделенную под переменную StaticArray
А вот сам массив TStaticArray так вроде не должен освобождаться.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 23.09.2009, 20:25
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Только это не статический массив, да и не массив вообще
Вот тоже самое, только тут видно что массив совсем нипричем:
Код:
type
  TStaticArray = array[0..255] of Byte;
  PStaticArray = ^TStaticArray;
var
  p:Pointer;
begin
  GetMem(p,SizeOf(TStaticArray));
  TStaticArray(P^)[25]:=25;
  ShowMessage(IntToStr(TStaticArray(P^)[25]));
  FreeMem(p);
end;
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #6  
Старый 23.09.2009, 22:37
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Этот код приобретет смысл, как только вы объявите несколько переменных типа TStaticArray. И каждая из них будет кушать память в размере SizeOf(TStaticArray).

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

Я так поняла, что человеку надо именно освободить память, отведенную под переменную — «экземпляр типа», если так можно выразиться.
Ответить с цитированием
  #7  
Старый 23.09.2009, 23:33
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

Цитата:
Сообщение от Nyctos Kasignete
Я так поняла, что человеку надо именно освободить память, отведенную под переменную — «экземпляр типа», если так можно выразиться.
В точку

Но что-то этот код странный:
Цитата:
Сообщение от Nyctos Kasignete
Или же так... =)
Код:
type
  TStaticArray = array[0..255] of Byte;
  PStaticArray = ^TStaticArray;
var
  StaticArray: PStaticArray;
begin
  New(StaticArray);
  StaticArray^[25] := 25;
  StaticArray^[255] := 255;
  ShowMessage(IntToStr(StaticArray^[25] + StaticArray^[30] + StaticArray^[255]));
  Dispose(StaticArray);
end;
Во избежания различных манипуляций приведу полный код!
Код:
var vertexBuffer:array[0..1] of GLInt;
Procedure VBOInit;
begin
  glGenBuffers( 2, @vertexBuffer);

  glBindBuffer( GL_ARRAY_BUFFER, vertexBuffer[0]);
  glBufferData( GL_ARRAY_BUFFER, sizeof(GLFloat)*(high(Vertexes)+1), @Vertexes[0], GL_STATIC_DRAW );
  glVertexPointer( 2, GL_FLOAT, 0, nil);
  glBindBuffer( GL_ARRAY_BUFFER, vertexBuffer[0]);

  glBindBuffer( GL_ARRAY_BUFFER, vertexBuffer[1]);
  glBufferData( GL_ARRAY_BUFFER, sizeof(GLFloat)*(high(TexCoords)+1), @TexCoords[0], GL_STATIC_DRAW );
  glTexCoordPointer(2, GL_FLOAT, 0, nil);
  glBindBuffer( GL_ARRAY_BUFFER, vertexBuffer[1]);

{$Delete vertexBuffer}
end;
Каму очень любопытно, это не что иное, как инициализация буфера вершин и текстурных координат, см. VBO. Но вот в конце мы видим директиву "{$Delete vertexBuffer}", выдуманную разумеется. В этом месте мы по идее должны освободить оперативную память из-под массива vertexBuffer, потому что команда glBufferData уже загрузила его в видео память. Но как удалять такие массивы я не представляю, но ведь Delphi может подчищать их за собой после закрытия приложения (!!).
__________________
Делаем'c разные игры. Искать на glscene.ru
Ответить с цитированием
  #8  
Старый 23.09.2009, 23:51
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Цитата:
Сообщение от DungeonLords
Но что-то этот код странный
Ничего странного. Откройте стандартную справку Delphi.

Цитата:
Сообщение от DungeonLords
Код:
var vertexBuffer:array[0..1] of GLInt;
...
Из-за таких мелочей, действительно, бессмысленно суетиться...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter