Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
dilnab
Зарегистрирован: 11.07.2002 Сообщения: 100
|
Добавлено: Чт Окт 03 2002 09:43 Заголовок сообщения: C-шники помогите разобраться с выделением памяти |
|
|
Короче если выделяется память под массив оператором: WORD pArray[100]; хранится ли эта память в стеке? а если так: WORD *pArray; pArray = new WORD[100]; или так: pArray = (WORD*)GlobalAlloc( GMEM_FIXED, sizeof(WORD)*100);
в чем разница? что предпочтительнее и какой максимальный размер в каждом случае? |
|
Вернуться к началу |
|
|
Коллега Гость
|
Добавлено: Чт Окт 03 2002 16:58 Заголовок сообщения: Re: C-шники помогите разобраться с выделением памяти |
|
|
Да, хранится в стеке. В последующих случаях вы выделите память в "куче". Особой разницы нет, за исключением того, что все созданное в "куче" надо освобож- жать самому, делая например, delete[] pArray; (скобочки не забудьте - только в этом случае вся память корректно освободится). максимальный размер ограничен св-но размером стека и heap-а. В последнем случае нужно будет для освобождения пользоваться GlobalFree. |
|
Вернуться к началу |
|
|
Александр
Зарегистрирован: 07.10.2003 Сообщения: 276
|
Добавлено: Пн Окт 07 2002 14:55 Заголовок сообщения: Re: C-шники помогите разобраться с выделением памяти |
|
|
При описании массива внутри функции, компилятор выделит память в стеке программы, при описании вне функции(в модуле), компилятор выделит память в сегменте данных программы. При размещении динамически (new или malloc или GlobalAlloc) память выделяется в сегменте данных. Заполнение стека программы не желательно, из-за его ограниченного размера. Для размещения памяти не нарушая традиций программирования нужно использовать функцию malloc, для размещения обьектов - new. В Windows ограничения на память только размером файла виртуальной памяти. |
|
Вернуться к началу |
|
|
|