интерна работа char — лучше / равно искать

я попробовал следующее:

int main()
{
char* a = "sdwgfwegwe wefwef wefwefwefwysadqaw";
char* b = "acd";
char* c = "sdwgfwegwe wefwef wefwefwefwysadqaw";
char* d;

d = "acd";

printf("%p\n", a);
printf("%p\n", b);
printf("%p\n", c);
printf("%p\n", d);

getchar();

return 0;
}

и на выходе (консоли) a и c имели тот же адрес, что и b и d.
Я думал о реализации таблицы поиска для каждого символа.
есть ли польза / ситуация в этом?
и что из этого делает компилятор (пример выше, а не таблица соответствия :))? проверить, используется ли эта строка уже, если нет, зарезервировать память для данной строки -> вернуть ее?
есть ли у кого-нибудь какие-нибудь советы или ссылки в книгах, в которых подробно рассказывается о распределении внутренней памяти, даже если она зависит от компилятора?
заранее спасибо.

1

Решение

Строковые литералы определены как неизменяемые в C.

И из обоснования C99 документ:

«Эта спецификация позволяет реализациям совместно использовать копии строк с одинаковым текстом, разместить строку
литералы в постоянной памяти и для выполнения определенных оптимизаций «

7

Другие решения

Ответ C ++ (§2.14.5):

Все ли строковые литералы различны (т.е. хранятся в неперекрывающихся объектах), определяется реализацией.

Это полностью зависит от реализации, как он решает создавать строковые литеральные объекты. Одна реализация может сделать это по-другому с другой. Ваш, кажется, обрабатывает идентичные строковые литералы как один и тот же объект.

2

По вопросам рекламы [email protected]