Строка C по-прежнему указывает на адрес в памяти, где хранится «Hello\0World», только большинство функций обработки строк считают 0 концом строки. Для некоторых функций вы должны передать аргумент длины строки, но большинство из них просто читаются, пока не найдут нулевой байт. В памяти строка на самом деле "Hello\0World\0".
Механизм JavaScript не может определить длину строки, ища нулевой байт, поскольку в таком случае вы никогда не сможете иметь нулевой байт внутри строки. Возможно, что-то об этом есть в характеристиках. Вместо этого движок должен хранить длину строки отдельно, а затем считывать столько символов из памяти всякий раз, когда вы обращаетесь к строке.
А как правильно анализировать и сохранять размер буферов — это то, что языки сценариев обычно пытаются скрыть от пользователя. Это половина цели написания сценариев, чтобы не требовать от программиста беспокойства о добавлении 0
в созданные буферы символов и или отдельном сохранении длины строки, чтобы функции обработки строк не печатали кучу случайных символов за пределами вашего буфера в поисках нулевого байта. .
Так как же ведет себя строка JavaScript? Я не знаю, вероятно, движок должен подробно описать свои свойства. Пока вы взаимодействуете с объектом, как указано в спецификации, его можно реализовать любым способом, используя структуры для буфера и длины, используя символ перевода для 0, используя связанный список символов и т. д.
person
sapht
schedule
26.09.2012