На практике ответ на ваш вопрос зависит от того, где именно вы объявляете эту строку:
struct Something thing = {1, 2, "I'm a sentence..."};
В области действия файла это объявляет thing
с статической продолжительностью хранения , чтоозначает, что он живет от запуска программы до завершения программы.В этом случае, вполне вероятно, будет только одна физическая копия данных как в скомпилированной программе на диске, так и в памяти во время выполнения программы.
В качестве альтернативы, внутри функции это объявляет thing
с автоматическая продолжительность хранения , что означает, что он живет только до возврата функции.В этом случае в скомпилированной программе все еще может быть только одна физическая копия данных, но во время выполнения программы будет создаваться вторая временная копия, создаваемая каждый раз при достижении объявления thing
и уничтоженная.каждый раз, когда эта функция возвращается.(Обратите внимание, что это относится к 1
, 2
и значению указателя, хранящемуся в thing.member3
, но не к самой строке "I'm a sentence..."
- эта копия все еще существует только одна).Если функция вызывается рекурсивно, то будут сделаны третьи, четвертые и т. Д. Временные копии данных.