Чому розміри програм такі великі?


185

Якщо ми подивимось на вінтажну програму Netscape Navigator або ранню версію Microsoft Word, ці програми мали розмір менше 50 Мб. Тепер, коли я встановлюю google chrome, це 200 Мб, а версія для Slack настільна - 300 Мб. Я читав про якесь правило, що програми займуть усю наявну пам'ять незалежно від того, скільки вона є, але чому?

Чому нинішні розміри програм настільки великі порівняно з 10 чи 15 роками тому? Програми не виконують значно більше функцій і не дуже відрізняються. Що це за ресурсна свиня зараз?


134
Тільки в 4 рази більше ?! Це дивовижно, враховуючи, наскільки більше працює сучасний браузер
Річард Тінгл

23
Як зауваження, я вважаю, що "якесь правило, що програми займуть усю наявну пам'ять, незалежно від того, скільки вона є, але чому?" ймовірно, це стосується пам'яті випадкового доступу, а не фізичного простору на диску, принаймні, це було б моєю інтерпретацією цього. Може бути неправильним.
Троцький94

103
Отже, що ви говорите, це те, що програма, яка колись займала на жорсткому диску 10 доларів, зараз займає близько 30 копійок місця на жорсткому диску? Мені це важко переживати.
Ерік Ліпперт

49
«Програми не виконують значно більше функцій» - добрий лорд. Просто погляньте на специфікацію HTML 4 та специфікацію CSS 1 (не хвилюйтесь, я зачекаю - це не займе у вас довго, навіть якщо ви їх прочитаєте). Netscape 4 навіть не встиг їх належним чином реалізувати. Просто кількість нових і божевільних HTML та CSS, які підтримує Chrome, значна. Плюс у ньому є вкладки. І оновлюється кожні шість тижнів.
Пол Д. Уейт

13
До речі. 50 Мб у часи Netscape було великим, але, для запису, він включав не тільки веб-браузер, але й поштовий клієнт та редактор HTML, а можливо навіть щось інше.
el.pescado

Відповіді:


265

"Дивитись зовсім по-іншому" - це питання сприйняття. Сьогоднішня графіка повинна добре виглядати в абсолютно інших дозволах екрана, ніж раніше, в результаті чого зображення розміром 100x100, яке раніше було достатньо хорошим для логотипу, тепер виглядатиме жахливо липким. Її довелося замінити зображенням 1000х1000 тієї самої речі, що є коефіцієнтом 100 прямо там. (Я знаю, що ви можете використовувати векторну графіку замість цього, але це лише підкреслює сенс - код візуалізації векторної графіки потрібно було додати до систем, яким вона раніше не потрібна, тому це лише компроміс від одного виду збільшення розміру до іншого.)

"Робота по-іншому" - це також питання сприйняття. Сьогодні браузер робить масово більше речей , ніж один з 1995 (Спробуйте серфінг в Інтернеті з історичним ноутбук один дощовий день. - ви побачите , що майже непридатним для використання) Мало хто з них використовуються дуже багато, і використання може бути абсолютно не знають 90 % з них, але вони там.

Крім цього, звичайно, загальна тенденція витрачати менше часу на оптимізацію речей для простору та більше на впровадження нових функцій. Це природна побічна дія більших, швидших, дешевших комп'ютерів для всіх. Так, можна було б написати програми, які є такими ж ефективними, як і в 1990 році, і результат був би приголомшливо швидким і гладким. Але це вже не було б рентабельно; Вашому браузеру знадобиться десять років, до цього часу вимоги повністю змінилися б. Люди звикли програмувати з надзвичайною увагою ефективність, тому що повільні, маленькі машини минулого року змушували їх робити, і це робили всі інші. Як тільки це змінилося, вузьке місце для успіху програми перейшло від можливості взагалі працювати до запускувсе більше і більше блискучих речей , і ось де ми зараз.


120
Конкретні приклади речей, які повинен включати сучасний браузер, - це бібліотеки криптовалюти, база даних Unicode, час виконання JavaScript та оптимізація компілятора JIT, відеокодеки, PDF-рендерір, на додаток до складного механізму візуалізації та аналізаторів для всіх підтримуваних типів MIME. Це суттєво додається, але на відміну від ігор-браузерів не потрібно багато ресурсів з високою роздільною здатністю. Сучасна завантаження Firefox важить лише 40–50 Мб стиснуто.
амон

23
"результат був би приголомшливо швидким і гладким" - звучить як бажане мислення.
Doc Brown

16
@amon Не забувайте, що браузери також містять інші типи ресурсів та цілий API для плагінів і що ні. Вони навіть поставляються з інструментами налагодження (профілі, мережеві аналізатори, інспектори елементів, повністю функціональна консоль, налагоджувачі та ще багато). Браузери наближаються до цілої операційної системи, ніж ми всі можемо собі уявити. Навіть триває дискусія щодо використання веб-зборів! Оператор повинен вражати тонкою лайна, яку вони можуть набити в браузері.
Ісмаїл Мігель

10
@IsmaelMiguel Що стосується ОС Chrome, браузери вже є цілою операційною системою. ;-P
Ajedi32

111
tendency to spend less time on optimizing things for space Це. Коли я пишу код, я не оптимізую для простору чи швидкості. Я оптимізую для обслуговування. Важливо, що база даних може змінюватися легко, ніж бути швидкою або малою. Я можу очікувати, що за кожну скаргу на швидкість програми я отримаю десять запитів на нові функції та нульові запити, щоб зменшити її.
користувач2023861

108

Якщо ви порівнюєте Netscape Navigator з сучасним браузером, існує велика різниця у функціональності. Просто порівняйте специфікацію HTML 3.2 (51 сторінка, коли я роблю попередній перегляд друку) з поточною специфікацією HTML (версія PDF - 1155 сторінок). Це збільшення в 20 разів.

У Netscape Navigator не було DOM і не було CSS! Жодних динамічних змін документа не було, жодного JavaScript не змінював DOM або таблиць стилів. Немає вкладок. Немає аудіо чи відео. Сучасний браузер - це набагато більш складна програма.


12
Так, останні браузери роблять анімацію, градієнти, ефекти фільтрів зображень, JavaScript, 2D графіку (полотно), 3D графіку з WebGL, генерацію аудіо, геймпад (!), Декодування відео, розширене зберігання на стороні клієнта, одноранговий зв'язок (WebRTC), Геолокація, WebSocket, WebCryptography, MIDI, доступ до мікрофона / веб-камери, сповіщень тощо
ysdx

1
Додайте більше речей (DOM, CSS, Javascript), щоб також було більше нерухомості (кілька моніторів, масове збільшення роздільної здатності: екрани комп’ютерів , що збільшуються : з 1999 по 2011 рік ) - 800x600 проти 1920x1080 проти 4 к ... 8 к і далі ... 1080 до 4k - це вчетверо більша роздільна здатність ... 8k - знову вчетверо.
WernerCD

7
@WernerCD Просто більший екран не потребує більших двійкових. Значок розміром 64 на 64 пікселя та 32 біти потребуватиме стільки ж місця на диску, як і на моніторі 800x600 або 2560x1440. Змінення розміру вікна не змінює розмір двійкового файлу. Що стосується дисплеїв, це коли ви починаєте робити такі речі, як подвоєння пікселів, тоді вам потрібно більше ресурсів, щоб продовжувати виглядати різко (ер).
8bittree

1
@ 8bittree, це може підвищити попит на продуктивність програмного забезпечення. І більш ефективний код може бути складнішим (наприклад, веб-сайт, що використовує Canvas, ймовірно, потребує більшої складності та коду, ніж один, що використовує SVG). Але так, ти здебільшого прав.
Пол Дрейпер

1
Хоча, безумовно, вірно, що поточний HTML робить набагато більше, ніж це робив HTML 3.2, сама специфікація також набагато більш детальна, що додає значній кількості вмісту специфікації. Порівняйте довжину опису EMелемента HTML 3.2 - повних восьми чи дев'яти слів - з довжиною такої ж у специфікації HTML 5 - для мене більше, ніж скріншот, включаючи навколишній матеріал, що описує елемент, де він застосовний та яке його призначення.
CVn

79

Однією з причин є те, що дані, запаковані в додатках, є більшими, оскільки вони мають більш високу роздільну здатність та якість. Піктограма ще в часи Netscape мала максимум 32х32 пікселів, максимум 8-бітна глибина (можливо, лише 4,), тоді як зараз це, мабуть, щось на зразок 64х64 і в справжньому кольорі з прозорістю, тобто 32-бітовою глибиною. Це в 16 разів більше. А простір настільки дешевий, що люди часто навіть не турбуються перевіряти "стиснуту" опцію під час створення PNG.

Ще одна причина полягає в тому, що програми сьогодні несуть з собою приголомшливий обсяг даних, чого не мали старі програми. Сьогодні існують додатки, які постачаються разом із презентацією "Початок роботи" у відео .

Ще одна причина полягає в тому, що сьогодні мови програмування, як правило, поєднуються з багатим середовищем виконання, яке є досить великим, у розмірі 100 Мб кожна. Навіть якщо ви не використовуєте всі функції вашого середовища виконання, вам все одно доведеться пакувати всю програму за допомогою свого додатка.

Але головна причина полягає в тому, що сьогодні там є багато тонн і тонн бібліотек, які ми можемо використовувати у своїх програмах, і ми виробили культуру використання бібліотек, щоб уникнути постійного повторного винаходи колеса. Звичайно, щойно ви починаєте користуватися бібліотеками, з’являється кілька запитань, і ми виробили звичку давати на них найліберальніші відповіді:

  • Чи варто включити ще одну бібліотеку, якщо вона буде використовуватися лише однією з моїх функцій? - так.

  • Чи варто включити ще одну бібліотеку, якщо мені потрібен лише крихітний підмножина всього багатства функціональних можливостей, пропонованих цією бібліотекою? - так.

  • Чи варто включити ще одну бібліотеку, якщо її включення врятує мене лише від 2-х днів роботи? - так.

  • Чи варто включати кілька бібліотек, які служать більш-менш однаковою метою лише тому, що різні програмісти на моїй зарплаті вже знайомі з різними бібліотеками? - так.

    (Будь ласка, зауважте, що я просто дотримуюся цих тенденцій, я не висловлюю жодної заяви про те, чи згоден я чи не згоден з ними.)

Ще одна причина, яку варто згадати, полягає в тому, що, намагаючись вирішити, яку програму використовувати серед кількох варіантів, деякі користувачі думають, що той, який займає більше місця, буде більш насиченим функціями, матиме вигадливішу графіку тощо (що, звичайно, дурниця, звичайно .)

Отже, підсумовуючи, чи програмне забезпечення поводиться як газ? Чи схильна вона займати весь доступний їй простір? У певному сенсі так, але не в якійсь тривожній мірі. Якщо ми подивимось на те, що займає найбільше місця на наших накопичувачах, для більшості з нас відповідь полягає в тому, що це далеко не програми, а засоби масової інформації, такі як фільми та музика . Програмне забезпечення не роздувається з тією ж швидкістю, що розширюється ємність зберігання, і навряд чи це колись з'явиться, тому в майбутньому додатки, ймовірно, становлять незначну частину доступного для користувачів місця для зберігання.


17
Це правильна відповідь. У (зараз) коментарях з більш високим рейтингом згадується більше функціональності, але це не повністю пояснює збільшений розмір. Розмір походить від включених бібліотек, які забезпечують ці функції.
користувач1936

5
@IsmaelMiguel добре, я говорив про постійних користувачів. Також ігри є окремим випадком, оскільки ці 35 Гб - це переважно носії інформації, а не код, а також бібліотеки. Це просто випадкові засоби масової інформації, які ви можете переглядати лише через спеціальний додаток, який є грою. Але навіть для геймера, 35 Гб - це нічого на сучасних багатотерабайтних накопичувачах. Так чи інакше, припустимо, що якщо ви геймер, який наполягає на невеликому диску, то ви ніде не є представником користувачів там.
Майк Накіс

2
@MikeNakis Не кожен геймер має накопичувач на 1 ТБ або гроші на придбання 256 ГБ SSD. Деякі, як я, мають 128 Гб SSD або ноутбук менше ніж 500 ГБ. Нещодавно 80% мого використання місця на SSD були просто іграми. Це було просто 3-4 ігри, з'їдаючи простір. А в самій грі майже кожен має ноутбук і грає на ньому.
Ісмаїл Мігель

5
@Mike о, це не має значення. Коли ми говоримо про розмір програми, ми маємо на увазі або розмір завантажуваного інсталяційного файлу, або загальний простір, який займає програма на диску після встановлення. Сюди входять бібліотеки, засоби масової інформації, дані, все. І сьогодні, щоб уникнути проблем несумісності, програми зазвичай постачаються разом із більшістю бібліотек, які їм потрібні, замість того, щоб сподіватися, що бібліотеки вже будуть встановлені та матимуть правильну версію тощо. Розмір головного виконуваного файлу насправді не представляє жодного інтересу, ні будь-яких наслідків.
Майк Накіс

3
@IsmaelMiguel Для програміста це, ймовірно, різні їхні віртуальні машини, докер-контейнери тощо. Немає кращого здуття, ніж множення цілих роздутих систем ;-)
cmaster

16

Окрім інших ансер, 10 років тому зазвичай існували окремі версії для локалізованих / інтернаціоналізованих версій. Зараз, як правило, у випадку випуску версії програми вбудована підтримка локалізації у кожній випущеній версії, що додає розмір програми.


5
Я можу помилятися, але я працюю під ілюзією, що струни є найменшою частиною цієї проблеми. Правда, там багато мов, але все ж кількість рядків, які користувач бачить, дуже обмежена. Зрештою, один із найнадійніших способів відмови у вашому користувальницькому інтерфейсі - це включити занадто багато тексту.
cmaster

5
Додавання до того , @cmaster сказав, Firefox в зокрема , НЕ НЕ зв'язуйте повної локалізації (і поки я не думаю про це, і робить OpenOffice.)
BenjiWiebe

2
@cmaster Strings, ні. Але локалізовані відео та аудіо, особливо в контексті ігор? У IIRC була гра на 60 Гб (GTA V?), Де> 10 ГБ був виключно локалізованим звуком. Це вагомий шматок.
Боб

@Bob Правильно, я не думав про ігри, вони, здається, є великим винятком з того, що я написав.
cmaster

Для кожної мови таблиці рядків можуть містити до кількох зайвих байт K. Тільки самі піктограми програм типово обмежують загальний розмір всього рядкового вмісту (можливі винятки - програми із вбудованими словниками)
andyb

13

Однією з причин є залежності. Програма з багатою функціональністю та гарним зовнішнім виглядом потребує багато чого - шифрування, перевірки орфографії, роботи з XML та JSON, редагування тексту та багато іншого. Звідки вони беруться? Можливо, ви згортаєте свої власні та зберігаєте їх якомога менше. Швидше за все, ви використовуєте сторонні компоненти (можливо, MIT з відкритим вихідним кодом), які мають багато функцій, які вам ніколи фактично не потрібні, але як тільки вам потрібна одна функція від сторонніх компонентів, вам часто доводиться переносити весь компонент навколо. Таким чином, ви додаєте все більше і більше залежностей, і коли вони самі розвиваються і росте ваша програма, що залежить від них, також зростає.


Мені цікаво, чому це отримало два поточні моменти за ніч.
shartooth

6
Я цього не робив, але не думаю, що це дійсно відповідає на питання досить глибоко. Це майже просто говорить, що "програмне забезпечення стає більшим, тому що воно робить більше", і ви побачите з інших відповідей, що в ньому дійсно більше, ніж у цьому.
Гонки легкості на орбіті

1
Пов'язаний фактор полягає в тому, що в системах, які використовують статичне з'єднання, лінкеру, можливо, потрібно буде лише ввести код, який фактично використовується [деякі лінкери завжди втягуватимуть все, а краще намагаються бути вибірковими]. Під час використання динамічного зв’язку, особливо якщо модулі можуть бути спільними, навіть якщо першому коду, який встановлює модуль, потрібна лише одна функція від нього, неможливо знати, які функції можуть знадобитися іншому коду, який хоче поділитися модулем.
supercat

@sharptooth Я навіть навіть не дивуюсь. Хоча в більшості випадків система працює, я також бачу жахливо помилкові ламані відповіді, як часто божевільні та прийняті, а правильні - занадто часто впадають у небуття ...
Брайан Кноблауч,

10

Незважаючи на те, що графіка / зручність користування дійсно сприяють факторам, існує дуже багато цього, що складається з бібліотеки / надлишку зібраного коду.

Приклад того, як ще може бути невеликий код: MenuetOS, повна 64-розрядна ОС з потужними програмами, що вміщується на одній дискеті.

Приклад того, як великий код може бути без очевидних причин: я зробив простий вихід тексту "Привіт, світ!" в Аді нещодавно. Скомпільований виконуваний файл перевищував 1 МіБ !. Один і той же виконуваний файл в збірці - це лише KiB або 2 (а основна частина цього виконуваного режиму, фактичний запущений код - десятки байтів).


3
Що таке дискета? ;)
500 - Внутрішня помилка сервера

@ 500-InternalServerError Що таке Ада? : D
BenjiWiebe

3
для новачків, дискета становить близько 1,4 МіБ
Sarge Borsch,

3
Я бачив сучасні виконувані файли Ada на 200 байт. Але якщо ваш компілятор виконує такі функції, як повний час виконання завдань за замовчуванням, незалежно від того, використовуєте ви завдання чи ні, тоді варто очікувати 1 МБ або так. І зазвичай не варто турбуватися, як його зняти.
Брайан Драммонд

@BrianDrummond, це схоже на справді шалений час виконання, або нахабний час виконання, а також бібліотеку та зв’язок. У навчальному відео, яке я бачив багато років тому, Жан Іхбія та ін згадували, що типовий час виконання Ada (для оригінальної версії мови) буде близько 4K. З цікавості я перевірив це на пакеті виконання TI 320C30, який ми використовували. Він був прав на гроші.
Джон Р. Стром

7

Це правдоподібно, що програмне забезпечення повинно бути створене для того, щоб відповідати двом речам: користувачам та доступному обладнання. Програма підходить за своїм призначенням, якщо вона вчасно робить те, що користувач хоче, з обладнанням, що є у розпорядженні користувача. Ну так. Але в міру вдосконалення апаратних засобів у всіх виміряних розмірах збільшується кількість дискретних програм, які переходять від непридатних до придатних - дизайн-простір збільшується:

  • Мови вищого рівня дозволяють висловлювати ідеї за менший код та час, ніж раніше. Ця знижена складність, навпаки, дає можливість висловлювати все більш складні ідеї.
  • Об'єднання додатків із додатком може зробити його миттєвішим у використанні. Наприклад, це, мабуть, не задовго до того, як додатки для перевірки орфографії поставляться в комплекті з усіма відомими людству мовою - зрештою, це лише кілька гігабайт.
  • Компенсація апаратних засобів дозволяє розробникам та користувачам більше вибирати, про який ресурс вони піклуються. Дивіться, наприклад, FLAC / OGG vs WAV, SVG vs PNG, індекси баз даних.
  • Гуманні інтерфейси часто торгують тим, що раніше було б величезною кількістю обладнання для зручності використання. Анти-згладжування, висока роздільна здатність, швидке оновлення та перехід між тим, що становить дискретні панелі, - це все більш реалістичний, а отже, інтуїтивний та релейний досвід.

6

Це, безумовно, стосується програм Android. Чотири роки тому простий додаток займав приблизно 2-5 мегабайт місця. На сьогоднішній день простий додаток займає приблизно 10-20 мегабайт місця.

Чим більше місця, тим більше розмір програми.

Я думаю, що у випадку Android є дві основні причини:

  • Google розширив рамки Android, додав багато нового функціоналу.

  • Розробники більше не переймаються. Зображення включаються в набагато більшу роздільну здатність (звичайно, збільшується роздільна здатність екрана смартфона), сторонні бібліотеки бездумно включаються.


1
Остання точка кулі абсолютно правильна.
Гонки легкості на орбіті

3
Я зробив загалом один додаток для Android, а APK - 0,05 Мб. Знову ж таки, це не так багато. Мені все ще цікаво, чому додаток секундоміра (з аналогічною кількістю функціоналу, як і моя, хоча і зовсім інша) займає кілька МБ.
іммібіс

5
Останній пункт кулі не так, розробники роблять догляд. Нам просто потрібно жонглювати різними пріоритетами, а додаток стає трохи більшим.
NPSF3000

Також не допомогло те, що SDK (на той час) наполягав на додаванні бібліотеки 5 + Мб до моєї програми 0,05 МБ, яка мені не потрібна, і я повинен був пам’ятати, щоб видалити її перед збіркою релізу.
іммібіс

4

Багато цього зводиться до часу розробника та вартості цього часу. Ще в часи, коли Visual Basic вперше приїхав на сцену, він змагався з C / C ++, і великий стукіт був у тому, що ви могли написати "Hello World" в ANSI C для Windows, можливо, 15K. Проблема з VB полягала в тому, що у вас завжди був альбатрос бібліотеки часу виконання 300 Кб.

Тепер ви можете в 10 разів перевищити розмір вашої програми VB, і все одно це буде лише на кілька K більше, але в 10 разів більший розмір вашої програми C / C ++, і ви дивитесь на ще кілька МЕСЯТІВ.

Зрештою, розсип ваших заявок - це невелика ціна, яку потрібно заплатити за величезний стрибок у виробництві, зменшення ціни та величезну кількість можливостей, які ніколи б не були можливі в старі розроблені вручну дні; коли програми були невеликими та швидкими, але також слабкими, несумісними між собою, недостатньо характерними та дорогими для розвитку.


2
цю публікацію досить важко читати (стіна тексту). Ви б не хотіли відредагувати його в кращій формі?
гнат

1
"10-кратний розмір" Hello World вимагає "місяців на розвиток більше"? Чи чистить зуби десять разів, що передбачає стояння перед дзеркалом безперервно протягом місяця?
bcrist

Чищення зубів x разів - це лінійна функція x, але програмування, як правило, не є лінійною функцією. Якщо ви обробляєте кожен рядок коду, використовуючи мовні функції найнижчого рівня, ви отримуєте швидкий і невеликий код, але з більш високою ціною за рівень складності. Мови вищого рівня сильніше розширюють, але зберігають вартість ближче до лінійної функції складності.
andyb

2

З часом потреби користувача розвиваються і стають все більш вимогливими, тому постачальник / автори різних програмних програм змушені задовольняти ці потреби в ім'я конкуренції.

Але задоволення нової потреби означає часто додавати новий код. Новий код означає нові вразливості для усунення. Виправлення нових уразливостей може додати код або відкрити двері для нових вразливих місць.

Кожна додана функція для задоволення потреби користувача може потребувати більшої потужності процесора для швидкості (ми всі скаржимось на швидкість того чи іншого браузера), нові графічні ресурси для кращих візуальних ефектів ... тощо.

Все це означає додавання нових шарів додатків (код), безпеки, а іноді і апаратних засобів.


0

Велика кількість розмірів відбувається з вбудованих у бібліотеках. У наші дні багато додатків побудовані за допомогою електрона, який поєднує величезну кількість із додатком. Якщо ви встановлюєте програми на Linux, їх зазвичай набагато менше, оскільки значна частина програми вже встановлена ​​через спільні бібліотеки, які також використовують інші програми.


-1

Створюючи програмне забезпечення, якщо вам потрібна функція A, ви імпортуєте модуль A *. A * може вирішити A, але A * може вирішити проблеми більше, ніж A, а A * може бути великим. Усі великі модулі призводять до програмного забезпечення великого розміру.

Можливо, це не той самий випадок, але щось подібне: Якщо вам просто потрібно надрукувати "привіт світ" на консолі за допомогою Java, вам потрібно встановити JRE (> 60MB).

Якщо приклад Java не є гарним, спробуйте цей: Якщо програмне забезпечення потребує реєстрації у файл, він може використовувати модуль реєстрації, який може фактично робити журнали до бази даних, по мережі та деяких інших функцій, але функції ніколи не використовуються в проект.


Чому саме є 5 низових каналів, і жоден коментар не пояснює, чому?
Кромстер

1
@KromStern Перший розділ чудово висвітлює, як працюють бібліотеки, і робить це дуже незрозуміло з непослідовним використанням code. Я заперечую, що це взагалі не відповідає на питання. Другий розділ використовує Java як приклад (хоча намагається стверджувати, що JRE слід вважати частиною зростання розміру програми - що знову пропускає суть питання і зовсім не є справедливим прикладом і продовжує увічнювати непорозуміння Java). Загалом, це або неправильно, або повторює пункти у попередніх, краще написаних, відповідях.

1
Ваш приклад входу в мережу або файл теж не дуже хороший - адже з точки зору коду, обидва файли обробляються точно однаково (різницю між файлом і мережею управляє операційна система). Мені ще не доводиться бачити рамку ведення журналів, яка має "журнал у базі даних" як частину основної її функціональності, оскільки це буде ускладнено Oracle vs MySQL vs Sql Server vs Postgres vs ... драйверами та діалектичними відмінностями.

@ user40980 Операційна система не обробляє відмінність між файлом та мережею. Для підключення та запису до них потрібні різні дзвінки в ОС. Доступ до бази даних обробляється через рівень незалежності бази даних, наприклад JDBC або libdbi. (Що, в свою чергу, може
залучати

-2

Я читав про якесь правило, що програми займуть усю наявну пам'ять незалежно від того, скільки вона є, але чому?

Це не зовсім так. Системи не звільнять споживану пам'ять, поки операційна система не опиниться під тиском пам'яті. Це підвищення продуктивності. Якщо ви переглядали сторінку з зображеннями, ви переходите. Ви можете перейти назад, тому потрібне зображення знову. Якщо операційна система має оперативну пам’ять, немає сенсу очищати пам'ять, поки ви не будете впевнені, що вона вам знову не знадобиться.

Одразу очищення пам’яті забирає користувальницькі цикли процесора та пропускну здатність пам’яті, коли вони, ймовірно, хочуть відобразити на екрані високовідчутливі веб-сторінки.

Операційна система буде споживати всю наявну пам'ять, яка не є додатком, більшість з яких призначена для кешу файлової системи.

Управління пам'яттю - важка проблема, але над цим постійно працюють дуже розумні люди. Нічого не витрачається навмисно, і головна мета - забезпечити вам дуже чуйний комп’ютер.


3
Це зовсім не те, про що йдеться. Віртуальна пам’ять та збирання сміття були щойно винайдені, коли ця цитата була написана, і вони не мали широкого поширення.
Йорг W Міттаг

-2

Це може бути правдою, що програми, як правило, розширюються, щоб заповнити наявний простір, подібно до приміських явищ, коли ви додаєте нові смуги на заблоковану магістраль і через кілька років трафік знову резервується.

Але якщо ви подивитесь на це, ви можете виявити, що вони дійсно роблять більше речей. Наприклад, у веб-переглядачах працює модна графіка, є інструменти для розробників гладких, які не існували кілька років тому тощо. Вони також посилаються на багато бібліотек, використовуючи іноді лише невелику частину коду. Тому, хоча програми можуть збільшуватися в розмірах, щоб заповнити наявну пам'ять, деякі з них можуть бути наперед законними причинами.


2
це, здається, не пропонує нічого суттєвого щодо питань, викладених та пояснених у попередніх 13 відповідях
gnat

-3

Бібліотекам, побудованим на об'єктах, які не оптимізовані, потрібно більше пам’яті для завантаження, встановлення та більше обчислювальних циклів для роботи. Код об'єкта здебільшого роздутий.

Просто перегляньте стандартний код C ++, який працює, щоб побачити всі виклики об'єкта assert () ed, щоб переконатися, що вони є дійсними об'єктами. При проектуванні шару на шар об'єктів, що інкапсулюють об'єкти, підшари роздуті і непрозорі. Програмісти лінуються і беруть на себе більше об'єктів, оскільки це швидше, ніж переробляти те, що обмежено необхідною функціональністю. Це дійсно так просто.

Розглянемо розмір ядра Linux C, тільки ядра, порівняно з розміром замовлених програм. Ядро може запускати всю машину. Але вона побудована не так швидко, як програми, для того, щоб зробити найкращий функціонал потрібен час.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.