Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Вопросы начинающих программистов
Перезагрузить страницу Работа с динамической памятью
Ответ
 
Опции темы Опции просмотра
  (#16 (permalink)) Старый
D_K D_K вне форума
Member
 
Сообщений: 1,681
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.11.2005
По умолчанию 25.09.2006, 13:08

Цитата:
А в чем, собственно, проблема? Если мы выделяем память руками, то, соответственно, конструктор (и деструктор) должны тоже вызывать руками. Создание объека все-таки не ограничивается выделением памяти
Код в студию.


импортирован с progz.ru
Ответить с цитированием
  (#17 (permalink)) Старый
Narwal Narwal вне форума
Member
 
Сообщений: 1,039
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.10.2003
По умолчанию 25.09.2006, 13:14

Цитата:
2 В приложениях указатели не нужны. (Потому из managed и убрали)
Ну не нужны, так не используйте. Всего и делов.
И чего это, интересно, все так любят учить - вот это вам нужно, а вот это нет?

Цитата:
3 WinAPI в настоящее время очень избыточный и кривой, процентов 70 можно смело выкидывать на помойку. Но это уже немного другой вопрос
Это не вопрос, а тема для холивара. 8-)
Ответить с цитированием
  (#18 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 28.09.2006, 18:24

Цитата:
Код в студию.
Код:
// Manual c++ object management demo
// Copyright Dian, 2006
// www.progz.ru
// Tested on visual studio 8.0 only

#include <windows.h>
#define msg(arg) MessageBoxA(0, arg, "Test", 0x40);

// No startup code will run to make our test more clear
#pragma comment (linker, "/ENTRY:main")


class CMyClass
{
public:
    int* a;
    CMyClass(){ 
        a = new int [500];
        msg("Constructor called. Memory allocated");
    }
    ~CMyClass(){
        delete a;
        msg("Destructor called. Memory freed");
    }
};

CMyClass* c = NULL;

void main()
{
    // Allocate and zero memory using API
    c = (CMyClass*)LocalAlloc(GMEM_ZEROINIT, sizeof(CMyClass));

    // Implicit call of constructor for _existing_ object
    // It's needed to complete object's construction, memory will not be allocated
    c->CMyClass::CMyClass();

    // Working
    c->a[50] = 9;

    // Implicit call of constructor is required since we called constructor manually    
    c->~CMyClass();

    // Free memory using API
    LocalFree(c);
}
http://dian4all.narod.ru/misc/ManualObjMgmt.rar

Цитата:
Это не вопрос, а тема для холивара. 8-)
Это факт, признанный даже Microsoft. Почему, ты думаешь, они так усердно с ним борются в пользу .NET?
Ответить с цитированием
  (#19 (permalink)) Старый
Narwal Narwal вне форума
Member
 
Сообщений: 1,039
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.10.2003
По умолчанию 28.09.2006, 19:48

Цитата:
Это факт, признанный даже Microsoft. Почему, ты думаешь, они так усердно с ним борются в пользу .NET?
http://lists.unixcenter.ru/archives/mlug/2...ber/005782.html
Цитата:
Hо другая группа в Microsoft нашла в * фатальный недостаток - его
писали не они!
Может им "новый блестящий молоток" нравится? :-)
Ответить с цитированием
  (#20 (permalink)) Старый
D_K D_K вне форума
Member
 
Сообщений: 1,681
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.11.2005
По умолчанию 28.09.2006, 21:38

Попробуй на других компиляторах(не мелкомягких) . Это во-первых.
Во-вторых, скажи мне, зачем это надо? Стоит ли совсем небольшое увеличение скорости(хотя его вообще может не быть), того что придется самому вызывать конструкторы и деструкторы, для каждого объекта, под который память выделяли? По-моему, только вероятность ошибок возрастет и врядли бедет какой-либо положительный эффект. Если программе требуется настолько быстрая работа, что даже выделение памяти требуется ускорить, то и ООП ипользовать не стоит... На С писать.


импортирован с progz.ru
Ответить с цитированием
Ads.
  (#21 (permalink)) Старый
Narwal Narwal вне форума
Member
 
Сообщений: 1,039
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.10.2003
По умолчанию 29.09.2006, 13:15

Цитата:
Стоит ли совсем небольшое увеличение скорости(хотя его вообще может не быть), того что придется самому вызывать конструкторы и деструкторы, для каждого объекта, под который память выделяли? По-моему, только вероятность ошибок возрастет и врядли бедет какой-либо положительный эффект. Если программе требуется настолько быстрая работа, что даже выделение памяти требуется ускорить, то и ООП ипользовать не стоит... На С писать.
Tony Hoare first said, and Donald Knuth famously repeated, "Premature optimization is the root of all evil."
Ответить с цитированием
  (#22 (permalink)) Старый
Rune Rune вне форума
Member
 
Сообщений: 31
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.02.2006
По умолчанию 29.09.2006, 21:03

А у меня еще вопрос. Какой конструктор вызывается для базовых типов вроде int ?
Если ничего не вызывается, то malloc будет предпочтительнее. Или ,недавно вычитал, можно вызвать
operator new
Ответить с цитированием
  (#23 (permalink)) Старый
michael michael вне форума
Member
 
Сообщений: 969
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.08.2003
По умолчанию 29.09.2006, 22:21

Для int, как и для любого POD-типа, конструктор по умолчанию вызывается только явно. Т.е.:
Код:
int i;              // конструктор не вызывается
int j = int();      // конструктор вызывается
int *k = new int;   // конструктор не вызывается
int *q = new int(); // конструктор вызывается
Ответить с цитированием
  (#24 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 30.09.2006, 18:22

Цитата:
И чего это, интересно, все так любят учить - вот это вам нужно, а вот это нет?
Здесь не учат, здесь учатся. По поводу того, как именно это работает я недавно писал где-то в соседнем топике (и почему это не очень хорошо работает :) )

Цитата:
.NET исключает DLL Hell
Ага. Зато я буквально сегодня узнал, как именно это делается, точнее, какой ценой, и какие побочные эффекты порождает. Пожалуй, это повод для отдельного большого ушата дерьма

Цитата:
Во-вторых, скажи мне, зачем это надо?
Я не говорил, что это надо. Сколь либо заметная оптимизация может быть достигнута только при достаточно большом числе объектов (1 вызов выделения памяти, вместо, скажем, 10000000 вызовов аллокатора)
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со стеком с динамической структурой ovaaal Pascal 1 31.03.2012 21:05
C++ Работа с динамической памятью через указатели. Hqw33 Вопросы начинающих программистов 0 25.03.2012 12:38
Выделение динамической памяти Bishmaa Visual C++ 6 13.04.2011 13:58
Если связь между кеш памятью процессора и оперативной памятью? omen88 Любые вопросы от новичков 6 04.06.2010 00:15
Работа с памятью освобождение senon_evero .NET 0 28.06.2007 19:17
Работа с памятью Surface DirectX qpeHukc Программирование графики 0 24.04.2006 15:14
Работа с памятью, выделенной оператором new SergejP Visual C++ 12 14.02.2006 15:08
Исходники динамической матрицы в BCB 6.0 Pchelka C++ Builder 1 30.11.2005 00:40
Как работать с динамической памятью imported_MC Вопросы начинающих программистов 0 05.05.2005 22:19
Ошибка при работе с динамической памятью TNT Visual C++ 11 15.09.2003 22:21
Создание динамической памяти Anonymous C++ Builder 1 07.11.2002 18:29



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов