Пользователи PS4 пожаловались на вредоносное сообщение, останавливающее работу консоли

Некоторым из них пришлось делать сброс настроек системы.

11K11K открытий

Поясните, почему нельзя было сделать чтоб у сообщения не было верхней границы?

Ответить

Потому что гораздо проще сделать выравнивание, когда сообщения одинакового размера.

Чтобы было проще, представь себе длинный ряд квадратиков. В каждом квадратике может быть либо 1 либо 0. Такие квадратики называются битами.

Один байт - это 8 бит. Так сложилось, что символьный тип char вмещает как раз один байт информации. Вместе с этим типом сделали стандарт кодировки ASCII, в котором есть ровно 2^8 символов, то есть от 0 до 255.

Теперь представим себе как выглядят сообщения с другой стороны. Мне кажется, что они сделали все так: каждое сообщение - это строка из некоторого целого количества символов, например, 140. Для вывода отдельных сообщений происходит просто перескакивание указателя на некоторую константу, чтобы было проще хранить каждое сообщение.

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

Ну и поскольку у консолей навряд ли главное назначение - чаты (судя по тому как неудобно они реализованы), инженеры Sony решили что пользователи обойдутся стандартным размером сообщений в 140 символов.

P.S. С моего аналитического дивана это выглядит примерно так, но, вероятно, это все полная херня и все на самом деле не так. Но мне насрать.

Ответить

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

Ответить