powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / папка это файл?
25 сообщений из 230, страница 6 из 10
папка это файл?
    #39997084
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
andron81
пропущено...


почему проверка malloc на нулл это смерть сейчас ??? поясните более доступным языком, пожалуйста?

Все банально: программа попросила выделить кусочек памяти, а в ответ - нельзя, нет свободной памяти. И что дальше делать если без этого кусочка нельзя дальше работать?

Отказываться работать, вот что делать. Пишем свой Фотошоп. Два варианта на открытии файла:

- Не хватило памяти.
- Файл неверного формата.

MsgBox().

В случае вебсервиса -- отказ в обслуживании, держитесь там, заходите позжее.

Dima T

PS ИМХО необработанное исключение от new полезней, тут хотя бы деструкторы отработают.

А потом оно упадёт на необработанном исключении. Очень круто. Да и не стоит примешивать обработку ошибок и работу с памятью.
...
Рейтинг: 0 / 0
папка это файл?
    #39997087
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
mayton


Но для современного процесса в современной ОС... это просто смерть без вариантов.


почему проверка malloc на нулл это смерть сейчас ??? поясните более доступным языком, пожалуйста?

Потому что не существует никакого ценного принятия решения по этому поводу.

Давай порассуждаем. Ты написал приложение. Бизнес-приложение. Которое выполняет
полезную работу. И вдруг. На каком-то этапе приложение не может аллоцировать память.
Работа дальше заблокирована. Давай придумай какой-то план выхода из этой ситуации
и мы обсудим насколько он реалистичен.

Напомню что приложение - это не привет-мир. Это бизнес-приложение которое обычно
держит несколько сотен сетевых коннектов к базам и сервисам и в режиме event-driven
реагирует на бизнес события сети. И эта активность - не прекращается.

Обсуждать системные утилиты мне неинтересно т.к. их % ничтожно мал в общей
массе софта который мы разрабатываем за деньги каждый день.
...
Рейтинг: 0 / 0
папка это файл?
    #39997089
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

сложный вопрос для меня от человека умудренного опытом.
ну в данном случае наверно высвечиваем "нехватка памяти для размещения структуры DIR и сливаем эту фразу в лог, а затем выход.
...
Рейтинг: 0 / 0
папка это файл?
    #39997090
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Из сферы Unix(K&R, Linux, C). Можно посмотреть исходники утилиты tar и потрассировать ее работу в рантайме.
Из всех утилит что работают с файловой системой она быстрее всех справляется с операциями слияния тысяч
мелких файлов в один. Также и в обратку. Я спецом сравнивал ее с zip и другими тулзами и пришел к выводу
что tar - самый быстрый на локальной файловой системе. Какие гвозди в него вбиты - надо разбираться.
Но там будут многие ответы на вопросы по оптимизации.


Я решил сделать для начала не tar а du (DiskUsage). Он не копирует а просто обходит структуру фолдеров.

Вот что получилось по системным вызовам. Запускал по своему /home каталогу

Фрагмент лога strace
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
21:14:37.973151 write(1, "12\t../Documents/students/Dmitriy"..., 63) = 63
21:14:37.973190 newfstatat(4, "cb", {st_mode=S_IFDIR|0755, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0
21:14:37.973233 openat(4, "cb", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW|O_CLOEXEC|O_DIRECTORY) = 3
21:14:37.973266 fstat(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
21:14:37.973296 fcntl(3, F_GETFL)       = 0x38800 (flags O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_NOFOLLOW|O_DIRECTORY)
21:14:37.973323 fcntl(3, F_SETFD, FD_CLOEXEC) = 0
21:14:37.973349 newfstatat(4, "cb", {st_mode=S_IFDIR|0755, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0
21:14:37.973383 fcntl(3, F_DUPFD_CLOEXEC, 3) = 8
21:14:37.973410 getdents64(3, /* 4 entries */, 32768) = 176
21:14:37.973448 getdents64(3, /* 0 entries */, 32768) = 0
21:14:37.973475 close(3)                = 0
21:14:37.973501 newfstatat(8, "1acc8602a287cfe829af9cf7b8049dfeef779e", {st_mode=S_IFREG|0644, st_size=52, ...}, AT_SYMLINK_NOFOLLOW) = 0
21:14:37.973541 newfstatat(8, "0e8052df20aace2783e9c9f3d468dd2d29e610", {st_mode=S_IFREG|0644, st_size=161, ...}, AT_SYMLINK_NOFOLLOW) = 0
21:14:37.973576 close(8)                = 0
21:14:37.973606 write(1, "12\t../Documents/students/Dmitriy"..., 63) = 63
21:14:37.973646 newfstatat(4, "d6", {st_mode=S_IFDIR|0755, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0
21:14:37.973688 openat(4, "d6", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW|O_CLOEXEC|O_DIRECTORY) = 3
21:14:37.973721 fstat(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
21:14:37.973751 fcntl(3, F_GETFL)       = 0x38800 (flags O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_NOFOLLOW|O_DIRECTORY)
21:14:37.973777 fcntl(3, F_SETFD, FD_CLOEXEC) = 0
21:14:37.973805 newfstatat(4, "d6", {st_mode=S_IFDIR|0755, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0
21:14:37.973838 fcntl(3, F_DUPFD_CLOEXEC, 3) = 8
21:14:37.973865 getdents64(3, /* 3 entries */, 32768) = 112
21:14:37.973906 getdents64(3, /* 0 entries */, 32768) = 0
21:14:37.973948 close(3)                = 0
21:14:37.973989 newfstatat(8, "41210dbf79efd66962616924bdae854f805652", {st_mode=S_IFREG|0644, st_size=64, ...}, AT_SYMLINK_NOFOLLOW) = 0
21:14:37.974043 close(8)                = 0
21:14:37.974087 write(1, "8\t../Documents/students/Dmitriy."..., 62) = 62
21:14:37.974145 newfstatat(4, "e9", {st_mode=S_IFDIR|0755, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0
21:14:37.974205 openat(4, "e9", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW|O_CLOEXEC|O_DIRECTORY) = 3
21:14:37.974254 fstat(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
21:14:37.974300 fcntl(3, F_GETFL)       = 0x38800 (flags O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_NOFOLLOW|O_DIRECTORY)
21:14:37.974343 fcntl(3, F_SETFD, FD_CLOEXEC) = 0
21:14:37.974384 newfstatat(4, "e9", {st_mode=S_IFDIR|0755, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0
21:14:37.974442 fcntl(3, F_DUPFD_CLOEXEC, 3) = 8
21:14:37.974485 getdents64(3, /* 3 entries */, 32768) = 112
21:14:37.974537 getdents64(3, /* 0 entries */, 32768) = 0
21:14:37.974580 close(3)      



Ожидаю ваших активных комментариев.
...
Рейтинг: 0 / 0
папка это файл?
    #39997091
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
mayton,

сложный вопрос для меня от человека умудренного опытом.
ну в данном случае наверно высвечиваем "нехватка памяти для размещения структуры DIR и сливаем эту фразу в лог, а затем выход.

Верно. Все что мы можем сделать - это вывалиться с сообщением об аварии.
Более того. Даже сама процедура аварийного выхода может не сработать т.к.
ей для корректного завершения (!) сюрприз тоже может понадобиться память.

Ведь если ты пишешь качественное бизнес-приложение - ты обязан закрыть корректно
все курсоры в БД. Завершить транзакции в деструкторах твоих бизнес-процессов.

Вот поэтому для многих языков-платформеров нет никакой адекватной реакции
на OutOfMemory exception.
...
Рейтинг: 0 / 0
папка это файл?
    #39997096
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
mayton,

сложный вопрос для меня от человека умудренного опытом.
ну в данном случае наверно высвечиваем "нехватка памяти для размещения структуры DIR и сливаем эту фразу в лог, а затем выход.

Конечно. Так и делают библиотеки на которые опирается Майтун. А он, соответственно, не знает как реагировать на ситуации, которые отрабатывает базовая библиотека. Из этого делается вывод: на эти ситуации отреагировать невозможно. Но вывод ошибочный.
...
Рейтинг: 0 / 0
папка это файл?
    #39997100
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще я вот думаю наверно надо как советовал злой Сибиряков: забить болт на реализацию readdir, opendir и closedir. Воспользоваться ими из библиотеки и закрыть тему.
...
Рейтинг: 0 / 0
папка это файл?
    #39997131
Dima T
Все банально: программа попросила выделить кусочек памяти, а в ответ - нельзя, нет свободной памяти. И что дальше делать если без этого кусочка нельзя дальше работать?

отобрать у другой программы, очевидно же
весь мир так устроен, чё велосипед изобретать
...
Рейтинг: 0 / 0
папка это файл?
    #39997132
mayton
Алексей Роза 2020
пропущено...

v4 или 4.1
эта проблема была ещё лет 15 назад
у меня реально линух с/на самбу копирует быстрее, чем линух с/на nfs
и чистая винда тоже быстрее
а чё она решена? NFS 100 лет в обед. Сервер ставится и работает. Какие проблемы там решать столько лет?!
Я могу конечно грешить на свои кривые руки... но блин, я поставил сервер, а он сходу еле копирует.
И настраивать пытался.

А здесь https://www.sql.ru/forum/linux спрашивал?

я гуглил, а эта проблема так то распространённая
у меня он 1.8гб файл копирует быстро до 50%, а потом еле-еле, практически виснет
винда в/на самбу его скопирует за неск. секунд

petrav
Алексей Роза 2020

эта проблема была ещё лет 15 назад
у меня реально линух с/на самбу копирует быстрее, чем линух с/на nfs
и чистая винда тоже быстрее
а чё она решена? NFS 100 лет в обед.

Так может драйвер NTFS под Линукс кривой?

так он же в ядре? Ну у меня убунта, какой там кривой драйвер...
...
Рейтинг: 0 / 0
папка это файл?
    #39997135
mayton
Функции подобные strlen, strcmp имеют линейный расчет сложности. Тоесть чем длиннее строка тем они дольше
делают перемотку вперед. 2х гигабайтная строка будет считаться несколько секунд. Примерно как memory тест
при старте старых комьютеров. Когда черный экран Биоса нам освящает загрузку.

Особенность сишных строк чорт бы их подрал. Злобные любители Паскаля здесь хохочут над нами. И они правы.

а в паскале как?
...
Рейтинг: 0 / 0
папка это файл?
    #39997136
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
ntbackup.exe.
"Они убили Кенни!"Там - тоже сакральное знание про NTFS.Нет там сакрального знания - там есть Backup API.
...
Рейтинг: 0 / 0
папка это файл?
    #39997138
mayton
Ожидаю ваших активных комментариев.

ты тоже Dmitriy?
mayton
Верно. Все что мы можем сделать - это вывалиться с сообщением об аварии.

а чё вы со свопом сделали, м?
...
Рейтинг: 0 / 0
папка это файл?
    #39997139
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Бизнес-приложение. Которое выполняет полезную работу. И вдруг. На каком-то этапе приложение не может аллоцировать память. Работа дальше заблокирована.
Можно OOM-парашют выкинуть, можно кэши подрезать или собственных осетров. Много чего, в общем, можно сделать.

P.S.
Точка - не единственный знак препинания.Приложение выполняет полезную работу и вдруг, на каком-то этапе, не может выделить память. Всё - дальше работа заблокирована.
...
Рейтинг: 0 / 0
папка это файл?
    #39997141
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
Dima T
Все банально: программа попросила выделить кусочек памяти, а в ответ - нельзя, нет свободной памяти. И что дальше делать если без этого кусочка нельзя дальше работать?

отобрать у другой программы, очевидно же
весь мир так устроен, чё велосипед изобретать

Микроконтроллер? У кого отберёт?
...
Рейтинг: 0 / 0
папка это файл?
    #39997144
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
mayton
Ожидаю ваших активных комментариев.

ты тоже Dmitriy?
mayton
Верно. Все что мы можем сделать - это вывалиться с сообщением об аварии.

а чё вы со свопом сделали, м?

Мы рассматриваем сферический C в вакууме.
И уровень туториалов бедняги Андрона.
...
Рейтинг: 0 / 0
папка это файл?
    #39997145
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу утилиты disk usage.

Кто имеет комментарии? Эксперты мои дорогие...
...
Рейтинг: 0 / 0
папка это файл?
    #39997147
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Даже сама процедура аварийного выхода может не сработать т.к.
ей для корректного завершения (!) сюрприз тоже может понадобиться память.


да ладно ? мы ж отвалились по условию malloc == null то есть память не аллоцировалась, а значит свободна .
...
Рейтинг: 0 / 0
папка это файл?
    #39997149
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
malloc == null то есть память не аллоцировалась, а значит свободна .

Странная логика. Память не аллоцировалась потому что ее нет.
...
Рейтинг: 0 / 0
папка это файл?
    #39997150
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
andron81
malloc == null то есть память не аллоцировалась, а значит свободна .

Странная логика. Память не аллоцировалась потому что ее нет.


скажем я запросил аллоцировать 20Г, а свободно 500Мб. malloc выдал null. ну наверно ж 500Мб на то чтобы выдать сообщение хватит .
...
Рейтинг: 0 / 0
папка это файл?
    #39997157
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
mayton
Функции подобные strlen, strcmp имеют линейный расчет сложности. Тоесть чем длиннее строка тем они дольше
делают перемотку вперед. 2х гигабайтная строка будет считаться несколько секунд. Примерно как memory тест
при старте старых комьютеров. Когда черный экран Биоса нам освящает загрузку.

Особенность сишных строк чорт бы их подрал. Злобные любители Паскаля здесь хохочут над нами. И они правы.

а в паскале как?

Там разные строки были. Был вариант с хранением длины. Как в std::string. И был вариант pchar это наподобие
сишных ASCIIZ. И кажется еще было несколько библиотечных вариантов. Ну в основном использовался первый вариант.
...
Рейтинг: 0 / 0
папка это файл?
    #39997159
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Dima T
пропущено...

Странная логика. Память не аллоцировалась потому что ее нет.


скажем я запросил аллоцировать 20Г, а свободно 500Мб. malloc выдал null. ну наверно ж 500Мб на то чтобы выдать сообщение хватит .

Да. Для девопсовской или админской задачи такой вариант подходит. Приложение не взлетело при старте.
Админ зашел в конфигурацию. И вместо size=20G указал size=14G к примеру и всё стартовало успешно.
Но на практике, подобные пробирующие алгоритмы не работают потому что память нужна срочно и многим
работающим потокам. И если уже дошло до того что приложение работало несколько месяцев и вдруг
не смогло выделить память - то всё очень плохо и вот эта игра на понижение... или этот торг ну окей
я не смог взять 20Гиг так возьму 20 минус 500 метров - уже не очень полезен. Где-то есть утечка.
Надо разбираться.

Хочешь я в нашем форуме просто ради прикола подниму штук 10 старых топиков где есть malloc и мы просто
обсудим какие умные принятия решения можно сделать именно здесь и сейчас в исходнике? И окажется
что вобщем-то никаких. Можем просто падать с сообщением в STDERR.
...
Рейтинг: 0 / 0
папка это файл?
    #39997166
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
andron81
пропущено...


скажем я запросил аллоцировать 20Г, а свободно 500Мб. malloc выдал null. ну наверно ж 500Мб на то чтобы выдать сообщение хватит .

Да. Для девопсовской или админской задачи такой вариант подходит. Приложение не взлетело при старте.
Админ зашел в конфигурацию. И вместо size=20G указал size=14G к примеру и всё стартовало успешно.
Но на практике, подобные пробирующие алгоритмы не работают потому что память нужна срочно и многим
работающим потокам. И если уже дошло до того что приложение работало несколько месяцев и вдруг
не смогло выделить память - то всё очень плохо и вот эта игра на понижение... или этот торг ну окей
я не смог взять 20Гиг так возьму 20 минус 500 метров - уже не очень полезен. Где-то есть утечка.
Надо разбираться.

Хочешь я в нашем форуме просто ради прикола подниму штук 10 старых топиков где есть malloc и мы просто
обсудим какие умные принятия решения можно сделать именно здесь и сейчас в исходнике? И окажется
что вобщем-то никаких. Можем просто падать с сообщением в STDERR.


много чего хочу , но больше на данный момент хочу сделать первичную задачу. и ещё хочу её потом реализовать посредством findFirst для спортивного интереса.
...
Рейтинг: 0 / 0
папка это файл?
    #39997167
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

у меня какие-то приступы энтузиазма на старости лет. вот к примеру книги читаю 40 летней давности:)
...
Рейтинг: 0 / 0
папка это файл?
    #39997168
mayton
Был вариант с хранением длины.

так а длина не через strlen() вычислялась? Или тут strlen() в цикле?
...
Рейтинг: 0 / 0
папка это файл?
    #39997173
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Хочешь я в нашем форуме просто ради прикола подниму штук 10 старых топиков где есть malloc и мы просто
обсудим какие умные принятия решения можно сделать именно здесь и сейчас в исходнике? И окажется
что вобщем-то никаких. Можем просто падать с сообщением в STDERR.

Я хочу, поднимите один топик, для начала.

PS: И не падать, а корректно выходить, тоже вариант.
...
Рейтинг: 0 / 0
25 сообщений из 230, страница 6 из 10
Форумы / C++ [игнор отключен] [закрыт для гостей] / папка это файл?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]