Нет, ничего не изменится: функция у вас одна, вне зависимости от того, сколько объектов вы создадите.
Если вы хотите переменную поместить в объект, то добавьте поле в определение класса.
> здесь написан перевод из беззнакового в знаковый
где?
> перевод из беззнакового в знаковый, который выполняется в зависимости от реализации
он выполняется в зависимости от реализации в единственном случае: когда исходное значение не может быть представлено типом, к которому выполняется приведение.
> Оптимизатор, видя что в переменной 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 там где должен быть указатель на буфер.
Странно. Попробуйте git push origin +HEAD:<имя-ветки-на-bitbucket>
И не могли бы вы вместо написания собственного ответа писать комментарии к ответам, которые вы хотите прокомментировать?
Xano: в тех случаях, когда sizeof(int) отличается от sizeof(int{32,64}_t): компилятору придётся либо добавлять расширение знаком в арифметику, либо оперировать с лишними регистрами. Типы с фиксированным размером хороши для сериализации и в ABI, в остальных местах, если хочется гарантировать диапазон допустимых значений переменных, лучше использовать int_fast*_t.
> вместо int лучше использовать int32_t (ну, либо int64_t, Xano: как универсальный этот совет плох. Лучше использовать то, что подходит по логике приложения.
Ну а разве это не очевидное действие? Нет его в корне -- значит смотреть в initramfs.
Распаковать и убедиться, что есть /init, что это скрипт, что в 69й строке он сорсит /scripts/functions, что это происходит до pivot_root, и что файла такого на initramfs нет.
После этого смотреть в пакет, из которого пришёл update-initramfs.
Если вы хотите переменную поместить в объект, то добавьте поле в определение класса.