Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Cookie
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 28
1

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

10.12.2015, 19:58. Просмотров 267. Ответов 4
Метки нет (Все метки)

Всем привет, читал про динам. выделение памяти и тут возник вопрос. Так как для новичков пишут книги не очень глубоко, то в книге ответа на этот вопрос нет, и в интернете я тоже ничего не нашел, так что решил спросить здесь. Собственно сабж: есть оператор new, он выделяет память в оперативе размером равным указанному типу данных на этой системе и возвращает указатель на этот тип данных, который указывает на свежевыделенную память. То есть new int выделяет 4 байта в куче и возвращает int* указывающий на начало этой памяти. Окей, тут все вроде ясно. Идем дальше, можно выделять так же под массив память. Например new int[5] выделяет участок памяти 5*(sizeof(int)) и возвращает указатель на начало этой памяти, так? Вроде ясно (если я верно додумал). Далее мы можем освободить этот участов строкой "delete [] указатель". Например
C++ (Qt)
1
2
3
 
int* ptr= new int[5];
delete [] ptr;
, последняя строка вызывает деструктор для выделенной памяти, но как delete узнает сколько памяти ему нужно освободить в таком случае? Я понимаю так:
C++ (Qt)
1
2
int* ptr = new int;
delete ptr;
так как ptr имеет тип *int , то здесь освобождается sizeof(int) байт, например, так ведь? Но когда тот же самый указатель указывает на первый элемент массива, то неясно, откуда оператор узнает сколько именно байт памяти ему нужно освободить. Объясните пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2015, 19:58
Ответы с готовыми решениями:

Распределение памяти. Динамическое выделение памяти
an-1 an-2 ... a2

Динамическое выделение памяти
Всем привет. Научите, пожалуйста, правильно пользоваться динамическим...

Динамическое выделение памяти
Пусть есть класс с полем char *p. Если для поля p выделяется память...

Динамическое выделение памяти
Имеется: #define Index 1000 typedef int BaseType; typedef BaseType...

Динамическое выделение памяти
Использовать динамическое выделение памяти для программы : #include "stdafx.h"...

4
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
10.12.2015, 20:03 2
Cookie, выделяется больше памяти для служебной информации.
0
cyber-satyr
393 / 164 / 32
Регистрация: 10.12.2015
Сообщений: 717
10.12.2015, 20:10 3
Цитата Сообщение от Cookie Посмотреть сообщение
но как delete узнает сколько памяти ему нужно освободить в таком случае
Виртуальный адрес ptr будет ссылаться на конкретный физический адрес. Системный менеджер памяти хранит информацию о процессе и его ресурсах. Когда процесс скажет системе что ему более не нужен такой-то участок памяти, то она уже знает сколько чего и где "освободить".
0
Cookie
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 28
10.12.2015, 20:12  [ТС] 4
То есть выделяется еще сколько-то памяти для того, чтобы хранить информацию какой кусок памяти выделен оператором new?

Добавлено через 1 минуту
Окей, а что если я через realloc сокращу этот участок до 16 байтов(int[4])?. Тогда что?
0
cyber-satyr
393 / 164 / 32
Регистрация: 10.12.2015
Сообщений: 717
10.12.2015, 20:14 5
Cookie, это одна из многих задач, которыми занимается операционная система. Она следит за памятью, состоянием процессов и прочее, прочее, прочее.

Добавлено через 1 минуту
Цитата Сообщение от Cookie Посмотреть сообщение
Тогда что?
Все те же обращения к операционной системе.
0
10.12.2015, 20:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2015, 20:14

Динамическое выделение памяти
Первый раз столкнулся с такой задачей... Дали лабораторную работу: Разработать...

Динамическое выделение памяти
Подскажите как выделить динамически память мод двумерный массив... Спасибо....

Динамическое выделение памяти
Всем здрасти.Если выделять динамически память,например: char *p=new char; и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru