Ned
На дозапись
Ned
Но 22гб - уже проблема
Ned
Вообще, прога не на С
Square
Я тож думаю что проблема туточки где то
Ned
Но вызывается в итоге libc fopen
Ned
Fopen выдаёт ошибку (какую-то), на что вызывающая библиотека кидает эксепт
Ned
Потому что я отвечаю за то, что вызывается libc и корень зла в ней
Egor
Egor
Платформа — винда, и на 23 гб, сказали, уже точно фейлится. Но, имхо, это всё ещё мало информации по размерам и по минимальности примера, на котором воспроизводится.
Скажем, вполне может оказаться, что fopen или конкретная либа на самом деле не работают с файлами больше 4 ГБ. Или что на самом деле проблема вообще не в размере, а в самом файле (скажем, прав не хватает). Или ещё в чём-то.
Ned
Ned
Ну вот и ответ
Ned
Только что прервал запись, перезапустил утилиту - 11 гб файл открыть отказалась
Egor
Как ограничение на размер файла следует из ограничений на типы данных?
Egor
Я прошёл по ссылкам, увидел там только "Ограничения для целочисленных типов" — набор каких-то констант, ни у одной из которых не написано никакой связи с размером файлов, которые поддерживает стандартная библиотека.
Egor
А, окей, как версия "почему так сложилось" согласен. Не согласен лишь с тем, что этот вывод в занудном смысле "портируемый" или "следует из документации".
Ned
Да, это оно
Ned
Предложили использовать fopen64, но чёт пох
Ned
Пишет и ладно
Ned
Вон уже 30ГБ написал
Egor
Забавно. У меня локально никаких проблем не возникло. Прекрасно открываются файлы размером 1.9, 3.8, 5.7 ГБ в режиме ab.
Ned
Egor
Винда
Egor
Компилятор gcc 7.2.0 от msys2
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
Berkus
Ned
Выгрузил подкачку, забил ещё по самые 36Кб
Square
Egor
а гцц майкрософтовский CRT разве использует?
Очень зависит от того, что за сборка. Конкретно эта версия вроде бы частично да, местами использует вижаковский. А местами — свой. Из-за этого возникают разные спецэффекты
Square
🐙 Antony
С чем это связано?
Попробуйте для проекта #define _FILE_OFFSET_BITS 64
на 32х битах без этого макроса будут использоваться 32х битные числа для работы с фалами, и больше 4ГБ вы адресовать не сможете
🐙 Antony
https://digital-domain.net/largefiles.html
Ned
Да вот в чём проблема, отец. Я пишу не на С, а на D, потому что это единственный компайлер, который есть под рукой. Там я дёргаю функции из "dstdlib" (== "phobos") и она в свою очередь дёргает за ту libc, которая живёт в недрах винды
Ned
Я даже хз, что за libc в винде, это тупо рабочая машина, на которой я затираю следы своего пребывания
Ned
И кст, насколько я знаю, 32 бита адресует 4ГБ, почему ограничение на 2-то?
🐙 Antony
Ned
Да
🐙 Antony
На винде особая упячка (насколько я помню) - там два гига адресного пространства отъедает ОС.
Ned
Лул
Egor
Anatoly
Egor
Не, сори, там гигабайт отъедает, да.
Berkus
Berkus
ядро обычно себе кусок адресного пространства откусывает для простоты вычислений
Constantine
Ну положим не 2 а 3
Constantine
Мне казалось что по умолчанию с хрюши резерв в 1ГБ, но я совершенно не уверен
Berkus
1. запусти КДЕ
2. заполни весь диск
3. наслаждайся
(консоль будет работать, но она а) под рутом, б) я про другое)
Berkus
а, ты про разделение адресного пространства? да, так же
Anatoly
Berkus
ядро делает или 2-2 гб сплит или 1-3
Berkus
(и да, я про легаси 32 бита, на 64 битах неактуально)
Berkus
хотя там тоже АДРЕСНОЕ пространство поделено пополам
Anatoly
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
как всегда автор с исходной проблемой забыт и заброшен :)
Berkus
Alexander
биток рухнул с 7500 до 6600 за пять минут) просто fyi мало ли кто в теме
Alexander
бывает ага
Evgenii
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
Igor
на каждую новую библиотеку нужно будет перелинковывать приложение, я правильно понимаю?
Александр
Хреновый совет. Динамическая линковка на то и динамическая, а не статическая. Другое дело - лучше юзать нормальные обертки в бусте каком-нибудь для этого дела.