img
00:00
imgDRKB online - Динамическое распределение памяти
imgimgimg
  Общие вопросы
  Delphi IDE, компиллятор, отладчик, редактор
  Язык программирования Дельфи
  Общие вопросы
  Объектное ориентирование
  Работа со строками
  Работа с датами и временем
  Работа с числами
  Работа с битами
  Работа с массивами
  Работа с указателями, память
  Арифметика указателей
  Использование указателей на целое
  Как избежать использования неактуальных указателей
  Пример работы с указателями
  Получение ссылки на экземпляр класса
  Method pointers --> function pointers
  Быстрое сравнение памяти
  Динамическое распределение памяти
  StrAlloc и GetMem
  Освобождение памяти
  Очистить переменную в оперативной памяти
  Получение размера памяти выделенный под Pointer
  Потеря памяти
  Принципы работы с памятью в системе Windows32
  Linked List Memory Table
  Увеличение значения указателя
  Указатель на вариантный тип
  Указатель на функцию
  Функции для выделения, перераспределения и освобождения памяти
  Множества, записи и перечисляемые типы
  RTTI и другие трюки с информацией о классах, модулях и т.п.
  Взаимодействие с другими языками
  Threads
  Работа с коллекциями
  RTL Delphi (краткий справочник)
  Базовые классы
  Скрипты, компилляторы и связанные с ними вопросы
  Вокруг и около Паскаля или другие компилляторы Дельфи/Паскаль
  VCL
  Системные функции и WinAPI
  Базы данных
  Работа с файловой системой
  Репортинг, работа с принтером
  Работа с сетью, интернетом, протоколами
  Работа с графикой и мультимедиа
  Математика, алгоритмы
  Форматы файлов, данных. Конвертация форматов
  ActiveX, COM, DCOM, MIDAS, CORBA, интерфейсы, OLE, DDE
  Разработка приложений
  Kylix
  Delphi.Net
  Развлечения
  
  [drkb=327] Комментариев: 0 
Динамическое распределение памяти

delphi
uses WinCRT;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyArray: array[0..30] of char;
  b: ^char;
  i: integer;
begin
  StrCopy(MyArray, 'Delphi World - это круто!!!');
  b := @MyArray;
  for i := StrLen(MyArray) downto 0 do
  begin
    write(b^);
    inc(b, sizeof(char));
  end;
end;



@Drkb::00812
http://delphiworld.narod.ru/
DelphiWorld 6.0


Как мне уменьшить количество занимаемой мной памяти в сегменте данных? (или как мне распределять память динамически?)

Скажем, ваша структура данных выглядит похожей на эту:

delphi
type
  TMyStructure = record
    Name: String[40];
    Data: array[0..4095] of Integer;
end;


Она слишком большая для глобального распределения, так что вместо объявления глобальной переменной,

var
MyData: TMyStructure;

объявляете указательный тип,

type
PMyStructure = ^TMyStructure;

и переменную этого типа,
var
MyDataPtr: PMyStructure;

Такой указатель занимает всего лишь четыре байта сегмента данных.

Прежде, чем вы сможете использовать структуру данных, вы должны распределить ее в куче:

New(MyDataPtr);

и получить к ней доступ через глобальные данные любым удобным для вас способом. Единственное отличие от традиционного способа заключается в необходимости использования символа "^" для обозначения указателя на данные:

delphi
MyDataPtr^.Name := 'Советы по Delphi';
MyDataPtr^.Data[0] := 12345;


И, наконец, после использования памяти, освободите ее:

Dispose(MyDataPtr);

Примечание от Vit: статья актуальна в основном для 16 разрядных систем

@Drkb::00813
http://delphiworld.narod.ru/
DelphiWorld 6.0
Количество статей: 4366
 
Вход
Имя:
Пароль:
Запомнить
Регистрация Забыли пароль?
Мини-чат :)
Необходима регистрация
Архив мини-чата
19-01-2020 10:47
Programmer
уже подросток
19-01-2020 10:47
Programmer
13 лет этому сайту
19-01-2020 10:45
Programmer
уже 2020
14-01-2020 05:12
Xyu
Кароч дарова
14-01-2020 05:12
Xyu
Dirvachok
12-12-2019 19:32
Prokok
Всем привет!

12-12-2019 18:12
Programmer
admin создай беседу в вк про десксофт
09-12-2019 15:21
spex
ку
07-12-2019 23:51
admin
Это хоумпейдж, для души, с чего бы ему умирать? К тому же на хостинге другие сервисы подняты, для себя.
07-12-2019 22:49
Oleg4260
Мда... тут 2 страницы пролистаешь и уже на год раньше дата сообщения
походу сайт мёртвый. странно, что он до сих пор хостится, и даже админ вчера онлайн утром был.
Статистика
 СегодняВсего
Посетителей1162176403
Запросов3679326380169
Online
Пользователей0
Гостей22
imgimgimgimg
 
img
     00:00