Ned
На дозапись
Ned
Но 22гб - уже проблема
Ned
Вообще, прога не на С
Square
Я тож думаю что проблема туточки где то
Ned
Но вызывается в итоге libc fopen
Ned
Fopen выдаёт ошибку (какую-то), на что вызывающая библиотека кидает эксепт
Ned
Потому что я отвечаю за то, что вызывается libc и корень зла в ней
Egor
Потому что я отвечаю за то, что вызывается libc и корень зла в ней
Не аргумент. Программа из одной строчки падает?
Egor
Платформа — винда, и на 23 гб, сказали, уже точно фейлится. Но, имхо, это всё ещё мало информации по размерам и по минимальности примера, на котором воспроизводится. Скажем, вполне может оказаться, что fopen или конкретная либа на самом деле не работают с файлами больше 4 ГБ. Или что на самом деле проблема вообще не в размере, а в самом файле (скажем, прав не хватает). Или ещё в чём-то.
Ned
Ну вот и ответ
Ned
Только что прервал запись, перезапустил утилиту - 11 гб файл открыть отказалась
Egor
Как ограничение на размер файла следует из ограничений на типы данных?
Egor
Я прошёл по ссылкам, увидел там только "Ограничения для целочисленных типов" — набор каких-то констант, ни у одной из которых не написано никакой связи с размером файлов, которые поддерживает стандартная библиотека.
Egor
А, окей, как версия "почему так сложилось" согласен. Не согласен лишь с тем, что этот вывод в занудном смысле "портируемый" или "следует из документации".
Ned
Да, это оно
Ned
Предложили использовать fopen64, но чёт пох
Ned
Пишет и ладно
Ned
Вон уже 30ГБ написал
Egor
Забавно. У меня локально никаких проблем не возникло. Прекрасно открываются файлы размером 1.9, 3.8, 5.7 ГБ в режиме ab.
Egor
Винда
Egor
Компилятор gcc 7.2.0 от msys2
Berkus
негарантированно. если от рута не запускать
если место кончилось - умирают все (десктоп как минимум. т.к. он всякую хрень все время пишет). проверено неоднократно
Egor
Да, и ещё наверняка зависит от компилятора, его флагов и кто этот компилятор собирал. Не сарказм.
Egor
Excuse me? gcc (Rev1, Built by MSYS2 project) 7.2.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Ned
если место кончилось - умирают все (десктоп как минимум. т.к. он всякую хрень все время пишет). проверено неоднократно
Ну хз, я только что забил весь системный раздел так, что осталось 36Кб и ничего, всё работало
Berkus
Компилятор gcc 7.2.0 от msys2
а гцц майкрософтовский CRT разве использует?
Ned
Выгрузил подкачку, забил ещё по самые 36Кб
Square
если место кончилось - умирают все (десктоп как минимум. т.к. он всякую хрень все время пишет). проверено неоднократно
Особенно мне нравится таким zfs. Ее под 0 забить если, то нельзя ничо удалить потом без бубна
Ned
надо чтобы осталось 0
Он не даёт дальше писать если не в режиме администратора
Egor
а гцц майкрософтовский CRT разве использует?
Очень зависит от того, что за сборка. Конкретно эта версия вроде бы частично да, местами использует вижаковский. А местами — свой. Из-за этого возникают разные спецэффекты
🐙 Antony
С чем это связано?
Попробуйте для проекта #define _FILE_OFFSET_BITS 64 на 32х битах без этого макроса будут использоваться 32х битные числа для работы с фалами, и больше 4ГБ вы адресовать не сможете
Ned
А ты sdelete решил переписать?
Нет, я решил забить нулями диск в N проходов на машине, на которой нет инета.
🐙 Antony
https://digital-domain.net/largefiles.html
Ned
Да вот в чём проблема, отец. Я пишу не на С, а на D, потому что это единственный компайлер, который есть под рукой. Там я дёргаю функции из "dstdlib" (== "phobos") и она в свою очередь дёргает за ту libc, которая живёт в недрах винды
Ned
Я даже хз, что за libc в винде, это тупо рабочая машина, на которой я затираю следы своего пребывания
Ned
И кст, насколько я знаю, 32 бита адресует 4ГБ, почему ограничение на 2-то?
Ned
Да
🐙 Antony
На винде особая упячка (насколько я помню) - там два гига адресного пространства отъедает ОС.
Ned
Лул
Egor
Не, сори, там гигабайт отъедает, да.
Egor
1 отъедает, 3 остается пользователю
http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/
Berkus
ядро обычно себе кусок адресного пространства откусывает для простоты вычислений
Constantine
Ну положим не 2 а 3
Constantine
Мне казалось что по умолчанию с хрюши резерв в 1ГБ, но я совершенно не уверен
Berkus
1. запусти КДЕ 2. заполни весь диск 3. наслаждайся (консоль будет работать, но она а) под рутом, б) я про другое)
Berkus
а, ты про разделение адресного пространства? да, так же
Anatoly
Berkus
ядро делает или 2-2 гб сплит или 1-3
Berkus
(и да, я про легаси 32 бита, на 64 битах неактуально)
Berkus
хотя там тоже АДРЕСНОЕ пространство поделено пополам
Anatoly
http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/
ага, спасибо, освежил память
Berkus
https://unix.stackexchange.com/questions/4929/what-are-high-memory-and-low-memory-on-linux#5151
Berkus
The linux kernel splits that up 3/1 (could also be 2/2, or 1/3) into user space (high memory) and kernel space (low memory) respectively. Whether the split is 3/1, 2/2, or 1/3 is controlled by the CONFIG_VMSPLIT_... option; you can probably check under /boot/config* to see which option was selected for your kernel.
Anatoly
как всегда автор с исходной проблемой забыт и заброшен :)
Alexander
биток рухнул с 7500 до 6600 за пять минут) просто fyi мало ли кто в теме
Alexander
бывает ага
Ned
Считать разучился, дядя? 10 бит на адресацию 1КБ, 20 - 1Кб, 30 - 1Гб. 32 бита - 4 ГБ.
Ned
Я не понимаю тогда, с чем ты не согласен: с количеством адресуемой памяти или разбиением адресного пространства?
melvin
o/
Igor
продолжаем эпопею b.so с функцией void fun(), в ней по очереди выполняется X, Y, Z, W; функция вызывается ровно в одном месте в самой b.so, в остальном проекте не используется к b.so статически линкуется либа N (пока не знаю, статически или динамически, но линкуется), с completely_unrelated_function которая в b ни разу не вызывается ставлю return ровно перед вызовом fun(), всё хорошо сношу ретрун, ставлю его в самое начало функции, чтобы программа в неё вошла, и сразу же вышла в экзешнике dlopen("shared.so") возвращает 0, dlerror() возвращает 0, в логах symbol '_Z18completely_unrelated_functionRKSs': can't resolve symbol поднимаю бровь, $ readelf -s shared.so | grep completely_unrelated_function 9254: 00000000 0 NOTYPE GLOBAL DEFAULT UND _Z18completely_unrelated_functionRKS 81662: 00000000 0 NOTYPE GLOBAL DEFAULT UND _Z18completely_unrelated_functionRKS перекладываю ретурн между X и Y, всё работает, $ readelf -s shared.so | grep completely_unrelated_function 4256: 00000000 0 FUNC GLOBAL DEFAULT UND completely_unrelated_function_r 72766: 003598d0 1324 FUNC LOCAL HIDDEN 10 _Z18completely_unrelated_functionRKS 77071: 00000000 0 FUNC GLOBAL DEFAULT UND completely_unrelated_function_r перекладываю ретурн между Y и Z, опять анрезолвед симбол
Igor
*глубокий вдох | а*.жпг
Igor
убрал из dlopen флаг RTLD_NOW, символ остался анрезолвед, дллка загружается, но не дебажится дорогая принцесса селестия, не люблю си, люблю плюсы
oles
код в студию
Igor
1) этому куску кода с dlopen шесть лет, судя по логам меркуриала, я тогда ещё в универ даже не пошёл 2) библиотеки - плагины, которые перечисляются в файле конфига и релодятся по кнопке; есть другой способ их подгрузки?
Igor
а что использовать?
oles
запусти динамический линковщик в отладочном режиме и постори на чем он обламывается
Igor
нужная библиотека определяется и переопределяется в рантайме и должна предоставлять три функции с конкретной сигнатурой, как должна выглядеть нормальная полноценная линковка в этом случае?
Igor
на каждую новую библиотеку нужно будет перелинковывать приложение, я правильно понимаю?
Александр
Хреновый совет. Динамическая линковка на то и динамическая, а не статическая. Другое дело - лучше юзать нормальные обертки в бусте каком-нибудь для этого дела.