-
X-Received: by 2002:a05:622a:1214:b0:344:5ec8:d620 with SMTP id
y20-20020a05622a121400b003445ec8d620mr3630498qtx.228.1661608779136; Sat,
27 Aug 2022 06:59:39 -0700 (PDT)
X-Received: by 2002:a05:622a:1214:b0:344:5ec8:d620 with SMTP id
y20-20020a05622a121400b003445ec8d620mr3630498qtx.228.1661608779136; Sat,
27 Aug 2022 06:59:39 -0700 (PDT)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erj
e.net!3.eu.feeder.erje.net!feeder.erje.net!border-1.nntp.ord.giganews.com!nntp.
giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-gro
ups.googlegroups.com!not-for-mail
Newsgroups: pl.misc.elektronika
Date: Sat, 27 Aug 2022 06:59:38 -0700 (PDT)
In-Reply-To: <6309f91e$0$6211$65785112@news.neostrada.pl>
Injection-Info: google-groups.googlegroups.com; posting-host=5.172.255.94;
posting-account=fcN60AoAAACGnErMsW3A8rTO2UKkGJEn
NNTP-Posting-Host: 5.172.255.94
References: <6308cdf1$0$6193$65785112@news.neostrada.pl>
<4...@g...com>
<63091035$0$560$65785112@news.neostrada.pl>
<1...@g...com>
<6309b565$0$6193$65785112@news.neostrada.pl>
<0...@g...com>
<6309f91e$0$6211$65785112@news.neostrada.pl>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <e...@g...com>
Subject: Re: C - łańcuchy tekstowe definiowane w parametrach funkcji
From: Dawid Rutkowski <d...@w...pl>
Injection-Date: Sat, 27 Aug 2022 13:59:39 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Lines: 62
Xref: news-archive.icm.edu.pl pl.misc.elektronika:773968
[ ukryj nagłówki ]sobota, 27 sierpnia 2022 o 12:59:44 UTC+2 Atlantis napisał(a):
> On 27.08.2022 10:28, Dawid Rutkowski wrote:
> > Przy wywołaniu send("tekscik"), gdy send(const char *aArg),
> > "tworzony" jest zarówno wskaźnik aArg jak i anonimowa tablica z zawartością
"tekscik".
> > I obie te zmienne mają czas życia do zakończenia wywołania tej funkcji.
> Tutaj nie masz racji, a przynajmniej opisywane przez Ciebie zachowanie
> nie jest żadną uniwersalną regułą. Nie ma żadnej zasady która mówiłaby,
> że anonimowa tablica jest tworzona na stosie tuż przed utworzeniem
> wskaźnika, który by na nią wskazywał.
> Takie ciągi znaków zwykle są zbierane podczas kompilacji i umieszczone w
> rodata (czyli w przypadku mikrokontrolerów najczęściej we flashu) i
> potem po prostu wskaźnik będzie inicjowany wartością wskazującą na
> początek odpowiedniego ciągu znaków.
> Widać to chociażby w HEX-ach wsadów do starszych systemów
> mikroprocesorowych (Z80, 8051) gdzie wszystkie teksty są zebrane w
> jednym miejscu.
> Problemy pojawiają się w przypadku niektórych architektur, gdzie
> kompilator (o ile nie poinformujemy go, by robił inaczej) będzie przy
> starcie programu kopiował dane do RAM-u, bo wskaźnik na dane w RAM-ie i
> we flashu to nie to samo. Nawet wtedy ciągle jednak będą one istniały
> cały czas w formie zmiennych globalnych, a nie zostanę ulokowane na stosie.
>
> Moje pytanie odnosiło się do czegoś innego - chciałem się upewnić, czy
> przypadkiem w pewnych sytuacjach program w sposób niejawny nie zrobi mi
> niespodzianki i np. zamiast użyć wskaźnika wprost do ciągu w rodata w
> sposób niejawny nie wygeneruje tymczasowego tekstu na stosie, złożonego
> z fragmentów innych tekstów, w ramach optymalizacji.
Piszesz w C.
Nie w asemblerze, który z tego C zrobi kompilator.
Zrobi jak zrobi i może nawet działać.
Ale nie ma pewności.
Inny kompilator, a nawet ten sam z innym -Ox, może zrobić inaczej i działać już nie
będzie.
Jak jest send("tekscik") to po zakończeniu tej funkcji "tekscik" w tym samym miejscu
w pamięci może dalej być, ale nie musi.
Dlatego należy go skopiować - albo dawać wskaźnik na globala.
Tyle z punktu widzenia C.
Wskaźniki nie są do zabawy - bardzo łatwo utrudnić sobie życie.
Cóż, nikt do C nie zmusza - można pusać w assemblerze, możnasobie zmodyfikować język
i kompilator - tylko wtedy już nie będzie to C.
Następne wpisy z tego wątku
- 27.08.22 16:06 Dawid Rutkowski
- 27.08.22 16:53 J.F
- 27.08.22 20:30 a...@m...uni.wroc.pl
- 27.08.22 20:55 JDX
- 27.08.22 21:43 Dawid Rutkowski
- 28.08.22 12:34 JDX
- 28.08.22 14:27 Dawid Rutkowski
- 28.08.22 14:30 Atlantis
- 29.08.22 07:29 JDX
- 29.08.22 10:25 Krzysztof Gajdemski
Najnowsze wątki z tej grupy
- Dalekopis T100 - problem z powrotem karetki
- Diody LED - oświetlenie na choinkę
- ale wiesz, że są gotowce?
- jak wykryć zapalenie żarówki?
- Cyna dylemat
- Mierniki poziomu glukozy (CGM, FGM)
- A Szwajcarzy kombinują tak: FinalSpark grows human neurons from stem cells and connects them to electrode arrays
- Kontrola nad prądem - sprawdź jak działa [apka - przyp. JMJ] eLicznik
- NETIA i hasło logowania
- Modulacja FM
- Najgorszy język programowania
- Kol. sukces po polsku: firma Szumisie sp. z o.o.
- Chińska Telefonia 6G - Chcą Nas Sterować Elektrycznie - Jak Kukiełki w Teatrze Lalek!!!
- RS-485 ale automatycznie dwukierunkowy
- Leżakujące SSD gubią po roku dane
Najnowsze wątki
- 2025-12-21 Norweski przepis na pozbywanie się uchodźców odwiedzających kraj z którego "uciekli"
- 2025-12-21 UE bierze kredyt na 90GEUR, by przedłużyć wojnę na Ukrainie, w tym Polska 4-5%, czyli od 3,6 do 4,5GEUR
- 2025-12-21 Produkcja energii w elektrowniach atomowych
- 2025-12-20 No właśnie
- 2025-12-20 Wy tam w sądach jesteście JESZCZE BARDZIEJ POJEBANI
- 2025-12-20 eksplozja cen i kosztów w Polsce
- 2025-12-20 Dalekopis T100 - problem z powrotem karetki
- 2025-12-20 Diody LED - oświetlenie na choinkę
- 2025-12-20 Bieruń => Junior Dynamics 365 Finance Consultant <=
- 2025-12-20 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2025-12-20 Sędzia podrobił testament
- 2025-12-19 Nie widzieć gdzie się jedzie
- 2025-12-19 Wyłączenie sędziego
- 2025-12-19 12 latka zabiła rok młodszą koleżanke w Jeleniej Górze
- 2025-12-19 M. Romanowski JUŻ bez ENA ale dalej z nakazem aresztowania w RP3




Chińskie auta: Od niskiej jakości do globalnego lidera. Co pokazuje raport EFL?