Deutsch English Français Italiano |
<87plmfu2ub.fsf@nosuchdomain.example.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Keith Thompson <Keith.S.Thompson+u@gmail.com> Newsgroups: comp.lang.c Subject: Re: question about linker Date: Thu, 28 Nov 2024 01:25:48 -0800 Organization: None to speak of Lines: 46 Message-ID: <87plmfu2ub.fsf@nosuchdomain.example.com> References: <vi54e9$3ie0o$1@dont-email.me> <vi6sb1$148h7$1@paganini.bofh.team> <vi6uaj$3ve13$2@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain Injection-Date: Thu, 28 Nov 2024 10:25:49 +0100 (CET) Injection-Info: dont-email.me; posting-host="5d82f7250b92e1d8e1e5ba7e656a3e2b"; logging-data="518284"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+T/WXGdufwGmOQ+uS1IloY" User-Agent: Gnus/5.13 (Gnus v5.13) Cancel-Lock: sha1:4v5R1L/5uz4+pXmlNsR5tc3PGpE= sha1:DkVb6SLZWRGX+PKyJCg2IvCcTjA= Bytes: 2734 Thiago Adams <thiago.adams@gmail.com> writes: > On 27/11/2024 07:29, Waldek Hebisch wrote: [...] >> 1) campilers for embedded targets care very much about const. const >> qualified arrays go into read-only data section which is typically >> located in flash. Other arrays go to RAM. Embedded targets >> frequently have very small RAM and larger flash, so after >> dropping const program may no longer fit in available RAM. > > I think your comment applies for const in declarations like > > const int i = 1; > > I used to find const confusing, as it sometimes meant 'read-only' and > other times 'immutable.' I'm not sure what you mean. My understanding is that const means read-only, and nothing else. > Now, it seems less confusing to me. When const is used with variables > that can be initialized (init-declarator), it acts as 'immutable', > meaning the storage is constant. What exactly do you mean by "the storage is constant"? Are you talking about memory that is marked as read-only by the OS? Given something like: const int r = rand(); at block scope, the object will almost certainly be stored in ordinary read/write memory. The compiler will flag code that attempts to modify it (unless you play tricks with pointer casts, which can introduce undefined behavior). But if I do something like `*(int*)&r = 42;`, it's likely to "work". Defining an object as const can *enable* a compiler to store it in read-only memory (enforced by the OS, or maybe even physical RAM on some systems), but that's an implementation choice, not part of the semantics of const. [...] -- Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com void Void(void) { Void(); } /* The recursive call of the void */