hrls: Alex-Exsite не удосужился задать развёрнутый вопрос. Из того что он спросил ясно, что он не может понять, какие параметры передаются функции main. Во втором абзаце мана по ссылке об этом как раз и написано.
> время доступа к третьему становится в среднем больше, чем ко второму после 32 инт отступа alienstone: разве оно не должно было быть меньше второго в пределах предвыборки и догнать второе при доступе за переделы предвыбранного диапазона?
> Я ожидал увидеть зашкаливание времени
"зашкаливание" предполагает наличие "шкалы", т.е. опорного времени для сравнения. Вы же не знаете ни того, сколько занимает rdtsc, ни того, сколько занимает чтение из кеша.
> valgrind работает с отладочной версией программы Армянское Радио: отладочная информация нужна для полноты стектрейсов. Это означает, что при сборке нужно дать опцию -g компилятору и линковщику. Код программы при этом может быть "релизным" (-O2, NDEBUG, ...).
По части замедления в 50-100 раз я не уверен, мне кажется, что оно на порядок меньше.
Нет, ничего не изменится: функция у вас одна, вне зависимости от того, сколько объектов вы создадите.
Если вы хотите переменную поместить в объект, то добавьте поле в определение класса.
> здесь написан перевод из беззнакового в знаковый
где?
> перевод из беззнакового в знаковый, который выполняется в зависимости от реализации
он выполняется в зависимости от реализации в единственном случае: когда исходное значение не может быть представлено типом, к которому выполняется приведение.
> Оптимизатор, видя что в переменной now особого смысла нет, не стал ее создавать, а банально передал в sprintf то, что получил от процедуры RX (а RX наверняка выдает int).
Не может правильно работающий оптимизатор выкинуть приведение типа.
За brainbench.com -- плюс, за "сертификаты по С/C++ бессмысленны" -- минус. Есть разница между глубиной именно языковых знаний у людей, набравшх там больше 4.9 и меньше 4.5.
Я думаю, только создав свой промежуточный буфер -- в него складывать всё, что приходит из коллбэка, из него брать кусками фиксированного размера, когда набирается достаточно данных.
> Посчитал с помощью ps aux|awk '{s+=$6} END {print s}'
Сумма RSS? Но какой в этом смысл? RSS отражает сколько физической памяти ядро использует под задачу, это число слабо коррелирует с возможными утечками памяти.
Скорее стоило бы смотреть на VIRT (он же VSZ) вашего процесса -- сколько виртуальной памяти он занимает.
> как понять, что именно поедает память?
Смотрите в:
- cat /proc/meminfo : Slab, KernelStack, PageTables;
- cat /proc/vmallocinfo: вторая колонка (после диапазона адресов) -- количество выделенных страниц;
- cat /proc/slabinfo -- если Slab в /proc/meminfo большой.
> 158м used памяти написано в выводе команды free во второй строчке.
Ок, 158 по мнению free используется без учёта кэша/буферов.
А откуда берётся "Судя по top видно, что съедено в общей сложности 45788кб памяти"?
Так, по порядку:
1. O_DIRECTORY не влияет на открытие каталогов вызовом open, он влияет на открытие не-каталогов (попытка открыть не-каталог при указанном O_DIRECTORY -- это ошибка).
2. 0200000 = 0x10000
3. open во всех ваших скриншотах успешен, а валится readdir, потому что вы ему передаёте NULL там где должен быть указатель на буфер.