Отличается ли динамическое выделение памяти в C и C++ в популярных реализациях?

Что касается соответствующих языковых стандартов, C предлагает динамическое выделение памяти только через семейство malloc () , в то время как в C++ наиболее распространенная форма выделения выполняется оператором :: new () . C-style malloc также доступен в C++, и многие примеры «baby's first allocator» используют его в качестве основной функции распределения, но мне любопытно, как современные компиляторы реализуют фактический оператор производства - новый.

Это просто тонкая обертка вокруг malloc () , или она реализована принципиально иначе из-за довольно отличного поведения распределения памяти типичной программы C++ по сравнению с типичной программой C?

Изменить: Я полагаю, что основное отличие обычно описывается следующим образом: программа C имеет меньше, больше, долгосрочных ассигнований, в то время как программа C++ имеет много, небольших, краткосрочных ассигнований. Не стесняйтесь вмешиваться, если это ошибочно, но, похоже, вам было бы полезно принять это во внимание.]

Для такого компилятора, как GCC, было бы легко просто иметь одну реализацию распределения ядра и использовать это для всех соответствующих языков, Поэтому мне интересно, есть ли различия в деталях, которые пытаются оптимизировать результирующую производительность распределения на каждом языке.


Обновление: Спасибо за все прекрасные ответы! Похоже, что в GCC это полностью решает ptmalloc , и MSVC также использует malloc в основе. Кто-нибудь знает, как реализуется MSVC-malloc?

-121--637319- Использование оператора извлечения ifstream C++ > > для чтения отформатированных данных из файла В процессе обучения я пытаюсь использовать ifstream c++ и его оператор > > для чтения данных из текстового файла с использованием кода ниже Текстовый файл outdummy.txt имеет следующее содержимое: просто фиктивный Привет от потока 555 Мой...

В процессе обучения я пытаюсь использовать c++ ifstream и его оператор > > для чтения данных из текстового файла с использованием кода, приведенного ниже. Текстовый файл outdummy.txt содержит следующее содержимое:

just dummy
Hello ofstream
555

Мои вопросы о том, как считать данные символов, присутствующие в файле, в массив символов или последовательность. Как это сделать с помощью ifstream:: operator > > в коде ниже.

#include <iostream>
#include <fstream>

int main()
{
    int a;
    string s;
    char buf[100];
    ifstream in("outdummy.txt",ios_base::in);


    in.operator>>(a); //How to read integer? How to read the string data.??

    cout << a;

    in.close();
    getchar();
    return 0;
}
12
задан goldenmean 16 September 2011 в 13:16
поделиться