Что касается соответствующих языковых стандартов, C предлагает динамическое выделение памяти только через семейство malloc ()
, в то время как в C++ наиболее распространенная форма выделения выполняется оператором :: new ()
. C-style malloc также доступен в C++, и многие примеры «baby's first allocator» используют его в качестве основной функции распределения, но мне любопытно, как современные компиляторы реализуют фактический оператор производства - новый.
Это просто тонкая обертка вокруг malloc ()
, или она реализована принципиально иначе из-за довольно отличного поведения распределения памяти типичной программы C++ по сравнению с типичной программой C?
Изменить: Я полагаю, что основное отличие обычно описывается следующим образом: программа C имеет меньше, больше, долгосрочных ассигнований, в то время как программа C++ имеет много, небольших, краткосрочных ассигнований. Не стесняйтесь вмешиваться, если это ошибочно, но, похоже, вам было бы полезно принять это во внимание.]
Для такого компилятора, как GCC, было бы легко просто иметь одну реализацию распределения ядра и использовать это для всех соответствующих языков, Поэтому мне интересно, есть ли различия в деталях, которые пытаются оптимизировать результирующую производительность распределения на каждом языке.
Обновление: Спасибо за все прекрасные ответы! Похоже, что в GCC это полностью решает ptmalloc , и MSVC также использует malloc
в основе. Кто-нибудь знает, как реализуется MSVC-malloc?
В процессе обучения я пытаюсь использовать 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;
}