The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Правильная работа с памятью в обьектах."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Правильная работа с памятью в обьектах." 
Сообщение от Android emailИскать по авторуВ закладки(??) on 11-Фев-05, 09:51  (MSK)
Подскажите пожалуйста(или дайте ссылку)  какой вариант из 2-х, приведенных  ниже способов создания обьекта внутри обьекта лучше и почему.Интересно в какой области памяти в каждом случае будет расположен обьект.

class A
{
private:
//...
public:
//...
};

// 1 ВАРИАНТ:
class B
{
A a_object;
//...
};

//2 ВАРИАНТ:

class B
{
A *a_ptr;
B();
~B();
//...
};

B::B()
{
a_ptr=new a;
}

B::~B()
{
delete a_ptr;
}
Заранее спасибо.

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Правильная работа с памятью в обьектах." 
Сообщение от klalafuda emailИскать по авторуВ закладки on 11-Фев-05, 10:04  (MSK)
>Подскажите пожалуйста(или дайте ссылку)  какой вариант из 2-х, приведенных  ниже
>способов создания обьекта внутри обьекта лучше и почему.Интересно в какой области
>памяти в каждом случае будет расположен обьект.

http://ianzag.megasignal.com/ftp/pub/doc/books/book11/ru/

// wbr

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Правильная работа с памятью в обьектах." 
Сообщение от Android Искать по авторуВ закладки(??) on 11-Фев-05, 11:11  (MSK)
>http://ianzag.megasignal.com/ftp/pub/doc/books/book11/ru/
>
>// wbr

Спасибо за ссылку на хорошую книгу,но в ней этот вопрос раасматривается с точки зрения логического проектирования агрегирования классов.У меня с этим всё в порядке.Конкретизирую свой вопрос:В какой области памяти(сегмент данных, стек, куча) будет расположен обьект класса B в первом и втором случае?
И как лучше его разместить чтобы не было перееполнения(если мне нужно агрегировать в обьект  множество других "больших" обьектов) ?
Буду признателен за ссылку на источник где подробно рассказывается о
размещении обьектов в памяти(т.е где они размещаются при локальном/глобальном/выделении_при_помощи_new).Ещё раз спасибо.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Правильная работа с памятью в обьектах." 
Сообщение от klalafuda emailИскать по авторуВ закладки on 11-Фев-05, 11:20  (MSK)
>Спасибо за ссылку на хорошую книгу,но в ней этот вопрос раасматривается с
>точки зрения логического проектирования агрегирования классов.У меня с этим всё в
>порядке.Конкретизирую свой вопрос:В какой области памяти(сегмент данных, стек, куча) будет расположен
>обьект класса B в первом и втором случае?
>И как лучше его разместить чтобы не было перееполнения(если мне нужно агрегировать
>в обьект  множество других "больших" обьектов) ?
>Буду признателен за ссылку на источник где подробно рассказывается о
>размещении обьектов в памяти(т.е где они размещаются при локальном/глобальном/выделении_при_помощи_new).Ещё раз спасибо.

http://ianzag.megasignal.com/ftp/pub/doc/books/c++/en/Addison-Wesley - The C++ Programming Language (Special 3rd Edition).pdf

// wbr

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Правильная работа с памятью в обьектах." 
Сообщение от klalafuda emailИскать по авторуВ закладки on 11-Фев-05, 11:23  (MSK)
Конкретизирую свой вопрос:В какой области памяти(сегмент данных, стек, куча) будет расположен
>обьект класса B в первом и втором случае?

где создадите объект - там и будет располагаться.

>И как лучше его разместить чтобы не было перееполнения(если мне нужно агрегировать
>в обьект  множество других "больших" обьектов) ?

что в данном случае означает "переполнение" ?

// wbr

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Правильная работа с памятью в обьектах." 
Сообщение от Android Искать по авторуВ закладки(??) on 11-Фев-05, 18:47  (MSK)
>что в данном случае означает "переполнение" ?

Переполнение означает stack overflow.
Просто мне хотелось бы разобраться где размещаются члены-данные обьекта.
И если необходимо разместить буффер большого размера в нутри класса, то как лучше это сделать, просто обьявить или динамически выделить?
Предположим имеется класс:
class A
{
//...
char big_buff[131072];
};
//Если мы его обьявим внутри функции:
void func(void)
{
A a_obj;
return;
}
//То буффер разместится в стеке и мы получим переполнение.
//Второй способ:
Class A
{
//...
char *big_buff;
A();
};

A::A()
{
big_buff=new char[131076];
};
//В этом случае буффер будет рассположен в "куче" и переполнения не будет, так?
Прав ли я?
Спасибо за внимание.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Правильная работа с памятью в обьектах." 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 12-Фев-05, 19:38  (MSK)
Могу ещё смешнее пример привести.

class A
{
char big_buff[131072];
};

void func(void)
{
// Объект в куче
A* a_obj1 = new A;
// Объект на стеке
A a_obj2;
}

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Правильная работа с памятью в обьектах." 
Сообщение от Alexander S. Salieff emailИскать по авторуВ закладки on 14-Фев-05, 17:09  (MSK)
Насколько мне представляется, ты прав. Т.е. действительно, если работаешь с большими объемами данных, и есть вероятность что они будут создаваться в стековом пространстве (точка создания лежит в контексте фции), то лучше использовать динамическое выделение во избежание переполнения стека.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру