Is a string literal in c++ created in static memory?

前端 未结 4 2151
情书的邮戳
情书的邮戳 2020-11-22 15:07

Is a string literal in c++ created in static memory and destroyed only when the program exits?

4条回答
  •  孤城傲影
    2020-11-22 15:42

    Where it's created is an implementation decision by the compiler writer, really. Most likely, string literals will be stored in read-only segments of memory since they never change.

    In the old compiler days, you used to have static data like these literals, and global but changeable data. These were stored in the TEXT (code) segment and DATA (initialised data) segment.

    Even when you have code like char *x = "hello";, the hello string itself is stored in read-only memory while the variable x is on the stack (or elsewhere in writeable memory if it's a global). x just gets set to the address of the hello string. This allows all sorts of tricky things like string folding, so that "invalid option" (0x1000) and "valid option" (0x1002) can use the same memory block as follows:

    +-> 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 |
           +---+---+---+---+---+---+---+---+---+---+---+---+---+---+----+
    

    Keep in mind I don't mean read-only memory in terms of ROM, just memory that's dedicated to storing unchangeable stuff (which may be marked really read-only by the OS).

    They're also never destroyed until main() exits.

提交回复
热议问题