The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Философский вопрос: а хорошо ли хапать много оперативки чере..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Философский вопрос: а хорошо ли хапать много оперативки чере..." 
Сообщение от TLS Искать по авторуВ закладки(ok) on 31-Янв-05, 18:34  (MSK)
О, Коллективный разум!

Вкратце, проблема такова. Я сейчас написал класс, который нужен будет для передачи/приема информации по TCP, всё замечательно работает. Но задался вопросом: у меня буферы для отправляемых и получаемых сообщений создаются с помощью new. Точнее, в классе они не создаются, но программа должна их предоставить. И тут я осознал, что пересылаемые объемы данных могут быть и немаленькими - т.к. речь идет о передаче файлов, характерный размер которых равен 250-500 Кил, но может достигать и 2-3 метров.

Вот насколько хорошо будет если я сделаю
BYTE *buf = new BYTE[2097152]
к примеру? Не поплохеет ли машинке?

Под "машинкой" понимаю 2 крайности: обычная рабочая ВыньXP с одной стороны (сотни метров оперативки) и mini-pc с FreeBSD с несколькими десятками метров оперативки :).

Соответственно выбор такой: либо осознать, что ничего страшного не будет и перед отправкой файлов отображать их в оперативку целиком, либо написать дополнительные методы для пересылки файлов, которые будут непосредственно с хардом работать.
Как думаете, что лучше?

P.S. пересылать файлы блоками - не советуйте, класс это сам по себе делает, и мне не хочется его уже менять. Нужно лишь понять, откуда ему лучше подсовывать метровые объёмы данных :)
P.P.S. полевые испытания на 50 килобайтах через new показали что все ок - никто даже не поперхнулся.

Пасиба!

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Философский вопрос: а хорошо ли хапать много оперативки чере..." 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 31-Янв-05, 19:40  (MSK)
>BYTE *buf = new BYTE[2097152]
>к примеру? Не поплохеет ли машинке?

Как обычно - смотря какой машинке и смотря в каких условиях.

>Под "машинкой" понимаю 2 крайности: обычная рабочая ВыньXP с одной
>стороны (сотни метров оперативки) и mini-pc с FreeBSD с несколькими >десятками метров оперативки :).

Если таких процессиков одновременно пяток запустится, может наступить
полный @#$%:).

>Соответственно выбор такой: либо осознать, что ничего страшного не
>будет и перед отправкой файлов отображать их в оперативку целиком,
>либо написать дополнительные методы для пересылки файлов, которые
>будут непосредственно с хардом работать.
>Как думаете, что лучше?
>

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

>P.S. пересылать файлы блоками - не советуйте, класс это сам по себе
>делает, и мне не хочется его уже менять. Нужно лишь понять,
>откуда ему лучше подсовывать метровые объёмы данных :)

>P.P.S. полевые испытания на 50 килобайтах через new показали что все ок
>- никто даже не поперхнулся.
>

Смотря сколько таких "испытателей" на одной машине одновременно крутится
:)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Философский вопрос: а хорошо ли хапать много оперативки чере..." 
Сообщение от TLS Искать по авторуВ закладки(ok) on 01-Фев-05, 15:52  (MSK)
>Если таких процессиков одновременно пяток запустится, может наступить
>полный @#$%:).
Ну, в теории, кроме самой ОС на мини-PC будет только один процесс жить. Мой :)
>Выражение "непосредственно с хардом" означает, видимо, использование
>буфера ограниченного и фиксированного размера с постепенным
>подчитыванием и записью кусков. В этой связи нижеследующий
>PS не вполне понятен.
Согласен, слать нужно будет кусками, просто сам класс я делал таковым, чтобы он автоматически при превышении некоторого размера пакета бил его на блоки и пересылал поблочно с квитированием (чтобы ненароком не замусорить буффер TCP на приеме - там во фре, если не ошибаюсь, около 14-15 К). И соответственно если писать нечто специальное для файлов - нужно будет как-то согласовывать блоки файловые и блоки, на которые бъет класс. Один из пунктов, почему не хочется писать что-то новое :).

>Смотря сколько таких "испытателей" на одной машине одновременно крутится
>:)
См. выше - адын! :)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Философский вопрос: а хорошо ли хапать много оперативки чере..." 
Сообщение от dimus Искать по авторуВ закладки(??) on 01-Фев-05, 09:58  (MSK)
Это плохая идея - выделять память под весь файл сразу. Конечно так писать легче, однако подобный подход - прямо приглашение к DoS. А если я, как похой дядька, на вход вашей проги пошлю образ DVD Гига на четыре?
По моему, хорошей идеей будет выделять большой кусок памяти и работать с ним. Либо ограничивать максимальный размер передаваемых файлов.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Философский вопрос: а хорошо ли хапать много оперативки чере..." 
Сообщение от TLS Искать по авторуВ закладки(ok) on 01-Фев-05, 15:57  (MSK)
>Это плохая идея - выделять память под весь файл сразу. Конечно так
>писать легче, однако подобный подход - прямо приглашение к DoS. А
>если я, как похой дядька, на вход вашей проги пошлю образ
>DVD Гига на четыре?
В том-то и вопрос! Что Вас (как плохого дядьку) никто к проге не допустит :)
Речь идет о файлах размером (как писал) под 200-300К, несколько мегабайт - это ну в сосвсем экзотических и маловероятных ситуациях. Это не файлы, которые даёт пользователь, а файлы данных, которые генерит другая прога и у неё, естественно, есть совершенно четкие границы болтливости.
>По моему, хорошей идеей будет выделять большой кусок памяти и работать с
>ним. Либо ограничивать максимальный размер передаваемых файлов.
Идея хорошая - вопрос в том, стоит ли этим заморачиваться, принимая во внимание что ни о каких гигабайтах речи не идет. Там винта такого нету =)
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Философский вопрос: а хорошо ли хапать много оперативки чере..." 
Сообщение от regunkov Искать по авторуВ закладки(ok) on 01-Фев-05, 11:40  (MSK)
Не буду надоедать советами.

Просто посмотри что здесь написано:
17. Переносимость, как она понимается в GNU
http://www.opennet.me/docs/RUS/coding_standard/standard-17.html

===
Вы можете считать разумным использование мегабайта памяти. Не старайтесь уменьшать использование памяти, если Вы не подходите к этому барьеру. Если Ваша программа создает сложные структуры данных, стройте их в памяти, и выдайте фатальную ошибку, если malloc вернул ноль.
===

А ты к барьеру подошел.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру