Насколько мне известно, компоновщик пытается объединить два строковых литерала в один единственный литерал, если они оба одинаковы, например:
file1.c
char const* firstString = "foo";
file2.c
char const* secondString = "foo";
Результатом будет только один случай foo\0
в соответствующей секции памяти (сохранение 4 байта).Это особенно важно для встроенных приложений (как ведет себя avr-gcc
против gcc
).
Но мне было интересно, могу ли я действительно рассчитывать на это и полагаться, что если две строки равныКроме того, их указатели равны (при условии, что во всей программе вы передаете только строковые литералы, а строки, генерируемые во время выполнения, не существуют - что является разумным предположением в моем случае).Очевидно, что я хочу ускорить сравнение скорости с этим и позволить широко используемой функции получить строковый литерал, например, так:
void lock(char const*);
void unlock(char const*);
lock("test");
dosmth();
unlock("test");
По сути, я хочу избежать огромного перечисления и огромных переключателей внутриlock
/ unlock
функции.