4869

Указатели и массивы. Способы распределения памяти. Динамическое распределение памяти. Операции new и delete

Лекция

Информатика, кибернетика и программирование

Указатели и массивы. Способы распределения памяти. Динамическое распределение памяти. Операции new и delete. Динамические массивы. Как уже было сказано ранее, массивы представляют собой последовательно размещенную в памяти последовательность перемен...

Русский

2012-11-28

37.5 KB

19 чел.

Указатели и массивы. Способы распределения памяти. Динамическое распределение памяти. Операции new и delete. Динамические массивы.

Как уже было сказано ранее, массивы представляют собой последовательно размещенную в памяти последовательность переменных одного типа. В С++ имя массива связано с адресом, по которому в памяти находится первый элемент массива, т.е. по сути, является указателем на первый элемент массива. Используя правила адресной арифметики, можно работать с элементами массива без применения оператора индексации []:

int A[5]; // Массив из 5 элементов

 // Адрес A эквивалентен &A[0]

*( A + 2 ) = 10; // эквивалентно A[2] = 10;

 

 // Обход элементов массива с использованием адресной арифметики

 for ( int i = 0; i < 5; ++i )

 *( A + i ) = i;

С++ позволяет работать с несколькими видами памяти.

Глобальная или статическая память выделяется в момент загрузки программы в оперативную память (до вызова функции main), а её размер полностью определяется на этапе компиляции. В статической памяти размещаются переменные, объявленные в глобальном контексте (вне каких-либо блоков), а также статические переменные.

int i = 10;  // Глобальная переменная

double D[10]; // Глобальный массив

int main()

{

    ...

}

Автоматическая память — это специальный регион памяти, резервируемый при запуске программы до вызова функции main из свободной оперативной памяти и используемый в дальнейшем для размещения локальных объектов: объектов, определяемых в теле функций и получаемых функциями через параметры в момент вызова. Автоматическую память часто называют стеком. Управление автоматической памятью осуществляется компилятором – он «автоматически» выделяет память под локальные объекты при их создании и освобождает память при их разрушении.

int main()

{

 double d = 5; // Переменная в автоматической памяти

 int A[5];     // Массив в автоматической памяти

}

Динамическая память – это совокупность блоков памяти, выделяемых из доступной свободной оперативной памяти непосредственно во время выполнения программы под размещение конкретных объектов. Доступную программе свободную память называют кучей (heap). Управление динамической памятью осуществляется явным образом с помощью операторов new (выделение памяти) и delete (освобождение памяти). Обращение к памяти возможно через указатель на соответствующий участок.

double * d = new double(5.5); // Выделение памяти под одиночную

// переменную с одновременной

// инициализацией

 float * f = new float[10];    // Выделение памяти под массив

 delete d;    // Освобождение памяти, занимаемой

   // одиночной переменной

 delete [] f; // Освобождение памяти, занимаемой массивом

Использование динамической памяти становится необходимым в случаях, когда размер нужной памяти слишком велик для размещения в стеке (т.к. размер стека существенно ограничен), либо заранее неизвестен, например, когда в памяти необходимо разместить данные, поступающие из «внешнего» источника (ввод с клавиатуры, из файла, сетевого соединения и т.п.). В качестве примера, иллюстрирующего сказанное, можно рассмотреть задачу сохранения в массив последовательности чисел, вводимых с клавиатуры. Количество чисел заранее неизвестно.

#include <iostream>

int main()

{

 // Начальный размер резервируемой памяти

 const int INITIAL_SIZE = 10;

 // Прирост памяти при переполнении

 const int SIZE_INCREMENT = 10;

 // Выделяем начальное количество памяти

 double * D = new double [ INITIAL_SIZE ];

 // Текущее количество записанных элементов в массиве

 int currentLength = 0;

 // Текущий размер выделенной памяти

 int maxSize = INITIAL_SIZE;    

 // "Рабочая" переменная

 double tmp;

 

 while( std::cin >> tmp )  // Читаем очередное число

{

 // В массиве кончилось место

 if ( currentLength == maxSize )

 {

  // Увеличиваем необходимый размер памяти

  maxSize += SIZE_INCREMENT;

  // Запоминаем указатель на текущую память

  double * oldD = D;

  // Выделяем новую память (большего размера)

  D = new double[ maxSize ];  

  // Копируем содержимое "старой" памяти в "новую"

  for ( int i = 0; i < currentLength; ++i )

   D[ i ] = oldD[i];

  // Освобождаем "старую" память

  delete [] oldD;

 }

 // Записываем очередной элемент в массив

 D[ currentLength++ ] = tmp;

}

 // Вывод всех элементов массива

 std::cout << "Total elements: " << currentLength << std::endl;

 for ( int i = 0; i < currentLength; ++i )

 std::cout << D[ i ] << " ";

std::cout << std::endl;

 system( "pause" );

 return 0;

}


 

А также другие работы, которые могут Вас заинтересовать

29499. «СРЕДНИЙ ЧЕЛОВЕК»: ФИКЦИЯ ИЛИ РЕАЛЬНОСТЬ 102 KB
  В соответствии с такой исследовательской ориентацией предметом рассмотрения прежде всего становится человек как респондент массового исследования а лишь затем возникает проблема социальногрупповой типологии. в рамках исследовательской программы Советский человек. Средний показатель I высшая 1 1 1 1 1 1 1 II 1 1 1 1 1 1 1 III 3 4 3 2 3 3 3 IV 6 5 6 4 7 6 5 V 21 20 24 21 19 19 20 VI 17 11 15 14 13 13 12 VII 18 13 14 16 16 15 15 VIII 12 16 15 15 16 18 15 IX 9 11 10 10 10 10 9 X низшая 8 17 13 16 15 14 14 Средний статус 626 697 675...
29500. ИНДИКАТОРЫ И ПАРАДИГМЫ КУЛЬТУРЫ В ОБЩЕСТВЕННОМ МНЕНИИ 109 KB
  Нужен какойто переход к теоретическому уровню анализа построению работоспособных гипотез и моделей культуры или как было предложено Т. Исходное предположение состоит в том что получаемые исследователями в массовых опросах глубоких интервью статистике данные относятся к состоянию видимых терминалов скрытого от невооруженного глаза сложного и в определенном смысле целостного механизма культуры. Перемены социальные и культурные: разные шкалы времени Понятно что все феномены и процессы культуры могут существовать реально только в...
29501. ФЕНОМЕН ВЛАСТИ В ОБЩЕСТВЕННОМ МНЕНИИ: ПАРАДОКСЫ И СТЕРЕОТИПЫ ВОСПРИЯТИЯ 123.5 KB
  При этом за пределами внимания остаются особенности представлений о природе и функциях власти присущие массовому сознанию современного общества. Необходимые разграничения В нашем общественном мнении обычно слабо различаются механизмы и функции власти структура властных институтов роли и действия конкретных лиц наделенных властью. Многочисленные опросные данные относительно доверия к социальным институтам регулярно публикуемые в журнале Мониторинг показывают существенные различия в отношении населения к власти федерального центра и...
29502. ИНДЕКСЫ СОЦИАЛЬНЫХ НАСТРОЕНИЙ В «НОРМЕ» И В КРИЗИСЕ 164 KB
  В последнее время большую международную известность приобрел индекс потребительских настроений который в нашей стране разрабатывается группой ИПНРоссия на основе регулярных мониторинговых исследований ВЦИОМ; его результаты широко освещаются в периодической печати в том числе в журнале Мониторинге общественного мнения2. По аналогичным методикам могут быть построены как частные так и сводный индексы социальных настроений и установок. По своей методологической природе любой сконструированный индекс величина искусственно полученная в...
29503. ПРОБЛЕМА ЭМОЦИОНАЛЬНОГО БАЛАНСА ОБЩЕСТВА 182.5 KB
  Высказанные им соображения о методологической слабости психологической трактовки распространенных в исследованиях общественного мнения в том числе и проведенных ВЦИОМ перечней различных страхов представляются вполне правомерными. Представляется полезным обсудить особенности природы и функций социальных страхов различных типов в их соотношении с другими компонентами эмоционального поля общества например интересами радостями позитивными оценками и переживаниями. Первое и важнейшее различение с которым приходится сталкиваться при...
29504. «ЧЕЛОВЕК СОВЕТСКИЙ» ПЯТЬ ЛЕТ СПУСТЯ: 1989-1994 (Предварительные итоги сравнительного исследования) 86 KB
  ВЦИОМ провел обширное исследование Советский человек результаты которого составили основу коллективной монографии2. было осуществлено новое исследование направленное на выявление изменений в установках ценностях нормативных структурах поведения человека в условиях социальных перемен и потрясений прошедшего периода. В первом исследовании было опрошено 2700 человек в нескольких республиках СССР в том числе 1325 человек в России во втором 3000 человек в различных регионах России.
29505. ВОЗВРАЩАЯСЬ К ФЕНОМЕНУ «ЧЕЛОВЕКА СОВЕТСКОГО»: проблемы методологии анализа 89 KB
  Все это совершенно новые типы ориентаций не имеющие аналогов и корней в советской реальности или в традиционных характеристиках человека советского. В условиях продолжающегося кризиса государственно-политических институтов общества не только важнейшими показателями его состояния но в значительной мере и условием социального выживания являются именно те нормативные и ценностные структуры которые действуют на уровне социального человека то есть те которые интериоризированы в структуре усвоенных им ориентаций и рамок восприятия...
29506. ЧЕЛОВЕК В ПОИСКАХ ИДЕНТИЧНОСТИ: проблема социальных критериев 97 KB
  С мыслью о своем народе опрошенные по программе Советский человек в 1989 и 1994 гг. Место где я родился и вырос 40 41 Наше прошлое наша история 24 37 Территория на которой мы живем 10 25 Язык моего народа 22 19 Родная природа 16 18 Государство в котором я живу 28 17 Исследования по программе Советский человек 1989 г. N = 1325 человек и 1994 г. N = 3000 человек.
29507. Сексуальні девіації, їх причини і форми 106.5 KB
  Вона характеризується значним підвищенням цінності сексуального життя для людини і витискання інших цінностей. При девіантній гіперсексуальності людина використовує статевий контакт не тільки для отримання сексуального задоволення а скоріше для себе здійснюється сексуальний контакт без урахування згоди партнера за кількістю тривалістю часом місцем та формою реалізації. При цьому можуть використовуватись засоби сексуального контакту з приниженням партнера залякуванням його тощо. Асексуальна поведінка людина знижує значимість і...