63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
1

new vs malloc

01.09.2020, 22:54. Показов 759. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
С первой ссылки google взял вот это - In case of new, memory is allocated from free store where as in malloc() memory allocation is done from heap.
что значит free store?new может выделять память не в куче?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2020, 22:54
Ответы с готовыми решениями:

В чем разница между malloc() и (char *)malloc()
Прошу помочь разобраться: не могу понять в чем разница междуs=malloc(sizeof(char)); иs=(char...

New и malloc
Если смотреть на выделение памяти для арифметических типов уступает ли функций new malloc'у в...

new vs malloc
Чем new безопаснее(или лучше?) malloc?

new на malloc
Измените выделение памяти на C - malloc,и почему у меня не открывает текстовый файл? #include...

12
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
01.09.2020, 23:00 2
А разгадка проста:
Цитата Сообщение от https://www.geeksforgeeks.org/malloc-vs-new/
In case of new, memory is allocated from free store where as in malloc() memory allocation is done from heap.
...
Improved By : Yash Kumar Atri
2
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
01.09.2020, 23:05 3
Цитата Сообщение от ReYalp Посмотреть сообщение
что значит free store?new может выделять память не в куче?
Если вы о каких-либо гарантиях, то, конечно, стандарт С++ не говорит ничего о том, что выделение будет из heap'a.
0
1003 / 1858 / 176
Регистрация: 07.05.2013
Сообщений: 3,894
Записей в блоге: 12
01.09.2020, 23:08 4
Цитата Сообщение от ReYalp Посмотреть сообщение
new может выделять память не в куче?
Конечно, зависит от реализации компилятора.

Добавлено через 2 минуты
malloc new память

по этим ключам почитайте статьи
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
01.09.2020, 23:13  [ТС] 5
Azazel-San, vantfiles, окей, но что тогда это free store такое? Он как-то может выделить место на стеке? я никогда не встречал чтобы new выделал память под что-то на стеке, ведь если он так сделает то память очиститься при выходе из функции

Добавлено через 55 секунд
может автор имел ввиду placement new который в готовом куске памяти может объекты помещать?
0
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,269
01.09.2020, 23:25 6
ReYalp, new может быть перегружен под любое поведение.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
01.09.2020, 23:30  [ТС] 7
DrOffset, именно без перегрузки , на большинстве нормальных(популярных) компиляторов, new же выделяет место в куче , разве нет?Где же еще он может выделить место?
0
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
01.09.2020, 23:32 8
Цитата Сообщение от ReYalp Посмотреть сообщение
но что тогда это free store такое?
Хз.
Цитата Сообщение от ReYalp Посмотреть сообщение
Он как-то может выделить место на стеке?
Если кто-то так захотел, то сможет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <typename T>
struct new_ {
    explicit new_(T x) noexcept : ptr_{ new(alloca(sizeof(T))) T(x) } {}
    ~new_() { ptr_->~T(); }
    T& operator*() const { return *ptr_; }
private:
    T* ptr_;
};
 
int main() {
    std::cout << *new_<int>{2020};
    return 0;
}
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
01.09.2020, 23:34  [ТС] 9
Azazel-San,
Цитата Сообщение от Azazel-San Посмотреть сообщение
Хз.
мне кажется автор имел ввиду именно placement new.
0
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,269
01.09.2020, 23:36 10
Цитата Сообщение от ReYalp Посмотреть сообщение
именно без перегрузки
Где это указано в исходном вопросе?

Цитата Сообщение от ReYalp Посмотреть сообщение
большинстве нормальных(популярных) компиляторов, new же выделяет место в куче , разве нет?
Да.

Цитата Сообщение от ReYalp Посмотреть сообщение
Где же еще он может выделить место?
Где угодно. В исходном вопросе не указано про недопустимость перегрузок, да и стандартом не регламентируется где именно.

Добавлено через 1 минуту
Цитата Сообщение от Azazel-San Посмотреть сообщение
new(alloca(sizeof(T))) T(x)
Это неверно.
alloca выделит память в пределах конструктора, затем по выходу из него память все, не доступна, но твой код рассчитывает, что доступна.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
01.09.2020, 23:37  [ТС] 11
DrOffset,
Цитата Сообщение от DrOffset Посмотреть сообщение
Где угодно. В исходном вопросе не указано про недопустимость перегрузок, да и стандартом не регламентируется где именно.
буду в следующий раз указывать что речь идёт о стандартных new и malloc
0
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
01.09.2020, 23:37 12
Цитата Сообщение от ReYalp Посмотреть сообщение
мне кажется автор имел ввиду именно placement new
placement new - к выделению памяти не имеет никакого отношения.
0
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,269
01.09.2020, 23:39 13
Azazel-San, можно так сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
struct A
{
    static inline unsigned char * alloc = nullptr;
        
    void * operator new(size_t l) {
        unsigned char * r = alloc;
        alloc += l;
        return r;
    }
    
    A(int x) : x(x) {}
    
    int x;
    
};
 
int main()
{
    alignas(alignof(A)) unsigned char buffer[256];
    
    A::alloc = buffer;
    
    A * p = new A(10);
 
    p->~A();
}
Добавлено через 1 минуту
Цитата Сообщение от ReYalp Посмотреть сообщение
буду в следующий раз указывать что речь идёт о стандартных new
Не надо ничего такого указывать. Вы не поняли посыл собственной цитаты.
Любой new - стандартный. Именно в этом и подчеркивается отличие в цитате:
In case of new, memory is allocated from free store where as in malloc() memory allocation is done from heap.
стандартный new выделяет память из абстрактного хранилища, потому что это в его семантике изначально заложено.
2
01.09.2020, 23:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.09.2020, 23:39
Помогаю со студенческими работами здесь

new, malloc,
Добрый день. При роботе с дин. памяттю в конец выделяемой памяти добавляеться какойто бред, чтото...

malloc в С++
Подскажите пожалуйста как в данной программе выделить динамическую память с помощью malloc для...

malloc()
4to takoe malloc(), za4em nam ono nujno? pomogite=)))))))

malloc vs new
Доброго времени суток. Когда я для выделения памяти пользовался malloc/calloc и освобождал с...

malloc
всем привет полез с UIimage поиграца уперся в стену везде в туториалах встречаю строчки типа...

Malloc vs new
Здравствуйте. Вникаю в ручное управление памятью. Абзац из книги &quot;C++ для профессионалов&quot; не...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru