dmzlj -

VM_WORD beepvm__api_strlen(void *vm, VM_WORD *s) { return *s; }
причем, когда мне надо таскать эту строку между сишным кодом и beepvm --- я просто выделяю чуть больше, и в конец присобачиваю-таки '\x00'. Что бы избежать лишнего копирования-выделения памяти.
Давно хотел разразиться, да все не складывалось. Тот, кто изобрел nul-терминированную строку, постебался над индустрией на десятки лет. Даже круче того чувака (Хоар?) который считает, что это он один изобрел NULL.
Причем, вообще неясно, что послужило причиной такого "дизайна". Экономия чего? Памяти? Много наэкономили, особенно с учетом выравнивания? Избежали ограничения на размер строки? А что, там где экономия лишнего слова / байта на хранение размера существенна, есть столько памяти, что бы хранить строки неограниченных размеров? Да и где строки (именно строки) такого размера имели смысл и для чего? Всегда для больших массивов применялись другие структуры данных. Редко даже строка превышала 256 байт, так что вместо '\x00' можно было бы хранить тупо длину.
Следующий ненависти пост --- про архитектуры, позволяющие доступ к невыровненным данным.