вв писал(а):
вот у меня раз было, это строго говоря не ошибка но запомнилось. решается задача Коши для дифура в частных производных, сначала по пятиточечной аппроксимации а потом по трехточечной, для скорости. так оказалось что перед сменой аппроксимации нужно освободить всю память и определить ее снова. а если этого не сделать то компилятор чтО то чудит и делает так что программа считает на четверть медленнее.
У меня тоже было нечто...

Тоже не ошибка, и тоже запомнилось, хотя совсем из иной области, нежели Ваш пример. Мой излюбленный способ загружать в память текстовые таблицы из файлов следующий:
1) Загружаем весь файл в память (нечто вроде
char *data = (char *)malloc(filelength(fileno(f_id))+1);
fread(data, 1, filelength(fileno(f_id)), f_id));
2) Потом, для разбора используем функцию strtod(char *ptr, сhar **endptr):
x[i]=strtod(data, &data);
В описании на эту функцию сказано следующее:
Цитата:
strtod stops reading the string at the first character that cannot be interpreted as an appropriate part of a double value.
If endptr is not null, strtod sets *endptr to point to the character that stopped the scan (*endptr = &stopper). endptr is useful for error detection.
То есть в endptr должен помещатся указатель на первый символ, который нельзя интерпретировать как часть числа.
При использовании компиляторов Borland C++ Builder 5 & 6 все ОК, при использовании Watcom C/C++ 11.0 - тоже. Все ок, 10-мегабайтные таблицы грузятся на раз-два.

Но стоило мне откомпилить прогу в VC++ 6.0 - скорость загрузки упала неимоверно! Как выяснилось потом, реализация этой функции в Microsoft Visual C++ сделана так, что там сначала вызывается strlen(ptr), дабы определить длину строки

. Понятно - если строка длиной в 10 миллионов символов, это несколько замедлит работу..
