Re: storage of string literals

Liste des GroupesRevenir à l c 
Sujet : Re: storage of string literals
De : david.brown (at) *nospam* hesbynett.no (David Brown)
Groupes : comp.lang.c
Date : 11. May 2024, 17:07:25
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v1o1jf$23e1e$1@dont-email.me>
References : 1
User-Agent : Mozilla Thunderbird
On 11/05/2024 12:57, Johanne Fairchild wrote:
I don't think the standard says anything about where a string literal
would be allocated.  Could a compiler allocate on the stack string
literals defined inside a procedure?  (Can I say that ``string
literals'' are /defined/ or should use a different word?)  So that, for
instance, when the procedure dealWord (below) returns, token->category
would point nowhere.
 --8<-------------------------------------------------------->8---
typedef struct Token stoken;
 struct Token {
   char *category;
};
 void dealWord(stoken *token) {
   token->category = "cat1";
   [...]
}
--8<-------------------------------------------------------->8---
 Section 6.2.4 of C99 has title ``storage durations of objects''.  Point
4 says
    --8<-------------------------------------------------------->8---
   An object whose identifier is declared with no linkage and without the
   storage-class specifier static has automatic storage duration.
   --8<-------------------------------------------------------->8---
 Are string literals objects?  Thanks!
String literals result in arrays of static duration, and so I think are objects.  However, they do not necessarily have unique addresses, and can overlap.  The C standards say very little about how they are handled - it's all up to the implementation.
Since they are read only and static, they are almost always implemented in the text section of the binary, along with other read-only data beside executable code.  It is only on targets with distinct instructions for accessing code and data space that they go anywhere else.
They are never, AFAIK, allocated on the stack.  What would be the point?   In almost all implementations they are in the text section of the binary and accessible directly from there - copying them to local memory on the stack would give no benefits.  On targets where such text memory can't be read as conveniently (such as some old microcontrollers or DSPs), they would most likely be copied into data ram on program startup.

Date Sujet#  Auteur
11 May 24 * storage of string literals3Johanne Fairchild
11 May 24 +- Re: storage of string literals1Barry Schwarz
11 May 24 `- Re: storage of string literals1David Brown

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal