-
Data: 2022-08-27 15:59:38
Temat: Re: C - łańcuchy tekstowe definiowane w parametrach funkcji
Od: Dawid Rutkowski <d...@w...pl> szukaj wiadomości tego autora
[ pokaż wszystkie 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
- To koniec Starlinka dla Ukrainy. Karol Nawrocki zdecydował
- [OT] Wycinanie pianki kostkowej / szesciennej
- Alarm do lodówki
- Poczta Polska na Discord-zie
- Aku do UPS
- czy ludzie przestali słuchać muzyki?
- zabawa czatem :)
- Modernizacja instalacji elektrycznej w wielkiej płycie
- Co to za dziwne "białe namioty" co stawiają je w różnych dziwnych miejscach?!?
- RF-Harvester
- jest taki kryzys panie
- Francuska elektrownia atomowa zamknięta. Powodem "nieprzewidywalny" rój meduz
- Lutowanie linek szczotek węglowych w silniku odkurzacza
- Lutowalność połączeń
- mini 400 atari
Najnowsze wątki
- 2025-08-27 Kraków => Senior Fullstack Engineer (Low-Code Platform) <=
- 2025-08-27 Warszawa => Senior Cloud Engineer - AWS <=
- 2025-08-27 Warszawa => Senior Cloud Engineer - AWS <=
- 2025-08-27 Warszawa => Java Full Stack Developer (Angular2+) <=
- 2025-08-27 Kraków => Kotlin Developer <=
- 2025-08-27 Kraków => Programista Kotlin <=
- 2025-08-27 Lublin => ERP Implementation Consultant (AP Module) <=
- 2025-08-27 Czego Wysoki Sąd nauczył czyli jakiego zwrotu powinien użyć dziennikarz Pereira ZAMIAST "ustawia hejt"?
- 2025-08-26 Hej, Shreku!
- 2025-08-26 To koniec Starlinka dla Ukrainy. Karol Nawrocki zdecydował
- 2025-08-26 Tak działa Polska Rzeczpospolita Leśna. Państwo w państwie, leśne pałace i biurowce
- 2025-08-26 Tak działa Polska Rzeczpospolita Leśna. Państwo w państwie, leśne pałace i biurowce
- 2025-08-26 Warszawa => Presales Engineer IT <=
- 2025-08-26 Warszawa => Junior Rekruter <=
- 2025-08-25 Łódź => Kotlin Developer <=