Это, вероятно, очевидно, но предоставленные запросы будут отображать все файлы, но, возможно, вам не интересно знать, что ваши файлы конфигурации или проекта наиболее обновляются. Простой grep будет изолировать ваши файлы кода, например:
git log --pretty=format: --name-only | grep .cs$ | sort | uniq -c | sort -rg | head -20
То, где это создается, является решением реализации разработчика компилятора, действительно. Скорее всего, строковые литералы будут сохранены в сегментах только для чтения памяти, так как они никогда не изменяются.
В старые дни компилятора, Вы раньше имели статические данные как эти литералы и глобальные но изменяемые данные. Они были сохранены в ТЕКСТЕ (код) сегмент и ДАННЫЕ (инициализируемые данные) сегмент.
, Даже когда у Вас есть код как char *x = "hello";
, эти hello
, сама строка хранится в постоянной памяти, в то время как переменная x
находится на стеке (или в другом месте в writeable памяти, если это - глобальное). x
просто установлен на адрес эти hello
строка. Это позволяет все виды хитрых вещей как строковое сворачивание, так, чтобы "недопустимая опция" (0x1000) и "допустимая опция" (0x1002) могли использовать тот же блок памяти следующим образом:
+-> plus:0 1 2 3 4 5 6 7 8 9 A B C D E
| +---+---+---+---+---+---+---+---+---+---+---+---+---+---+----+
0x1000 | i | n | v | a | l | i | d | | o | p | t | i | o | n | \0 |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+----+
Имеют в виду, что я не имею в виду постоянную память с точки зрения ROM, просто память, это выделено хранению неизменного материала (который может быть отмечен действительно только для чтения ОС).
Они также никогда не уничтожаются до main()
выходы.
Да, строковые литералы допустимы на все время программы, даже во время разрушения статических объектов.
2.13.4/1 в Стандарте говорит
, обычный строковый литерал имеет тип "массив n символа константы" и статическая продолжительность хранения.
в Стандарте говорится относительно 'статической продолжительности хранения' в 3.7.1/1:
устройство хранения данных для этих объектов должно продолжиться в период программы.
Хорошо... Да. Они сортируют, должны быть; информация, которая составляет последовательность символов в каждой строке, должна быть где-нибудь. Если они должны были быть выделены динамично и затем инициализированы, где был бы, информация, привыкшая к к инициализации, находится? Таким образом более эффективно просто сделать строки статичными, так, чтобы они были всегда доступны и допустимы, как только программа сделана, загрузившись.
Строковые литералы хранятся в сегментах только для чтения памяти