Можно ли глобально отключить строки с нулевым завершением в GCC?
Я использую свою собственную библиотеку строк, и мне абсолютно не нужны конечные символы NUL, поскольку она уже хранит правильную длину внутри структуры.
Однако, если бы я хотел добавить 10 строк, это означало бы, что в стеке излишне выделено 10 байтов. С широкими строками дело обстоит еще хуже: На x86 теряется 40 байт; а для x86_64 80 байт!
Я определил макрос, чтобы добавить эти строки, выделенные в стеке, в мою структуру:
#define AppendString(ppDest, pSource) \
AppendSubString(ppDest, (*ppDest)->len + 1, pSource, 0, sizeof(pSource) - 1)
Использование sizeof(...) - 1
работает довольно хорошо, но мне интересно, могу ли я избавиться от завершения NUL, чтобы сэкономить несколько байтов?
wchar_t
имеют одинаковую длину независимо от архитектуры. Linux, в частности, использует 4 байта как для x86, так и для x86_64. - person intgr   schedule 20.11.2009char s[5] = { 'H', 'e', 'l', 'l', 'o' }
. - person AnT   schedule 20.11.2009sizeof (ptr)
ничего не знает об исходной строке. - person pmg   schedule 20.11.2009