-
Data: 2022-08-26 15:43:13
Temat: C - łańcuchy tekstowe definiowane w parametrach funkcji
Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Mam pytanie do osób w większym stopniu niż ja ogarniających zachowanie
kompilatorów języka C. Właściwie chcę się upewnić, że moje rozumowanie
jest słuszne.
Pisze obecnie pewną bibliotekę, której głównym elementem będzie maszyna
stanów. Jednym z jej głównych zadań będzie przetwarzanie i przesyłanie
dalej wiadomości wrzucanych do bufora pierścieniowego.
Od strony użytkownika będzie to wyglądało w ten sposób, że w dowolnym
momencie w programie będzie musiał wywołać funkcję, która będzie
wyglądała mniej więcej tak:
send(const char* str);
Wskaźnik str zostanie zapisany w buforze cykliczny, gdzie będzie czekał
do momentu, aż maszyna stanów będzie gotowa go odczytać i przesłać
dalej. W przypadku danych zapisywanych w RAM-ie siłą rzeczy trzeba
będzie więc zadbać, żeby żyły odpowiednio długo i np. nie znikły ze
stosu. Konieczne będzie więc używanie tablic globalnych albo lokalnych
statycznych.
A co w sytuacji, kiedy będę chciał wysłać po prostu wartość podaną
wprost w argumencie funkcji, np.?
send("przykladowy tekst");
Co w takiej sytuacji zrobi kompilator?
1. Zapisze tekst bezpośrednio we flashu i przekaże funkcji wskaźnik na
początek łańcucha zapisanego w pamięci nieulotnej.
2. Przed wywołaniem skopiuje wartość z flasha na stos i przekaże
wskaźnik do miejsca w pamięci RAM - po zwinięciu się stosu zawartość
może zostać nadpisana.
3. Zachowanie nie jest jasno zdefiniowane i zależy od innych czynników.
Oczywiście mówimy o w miarę współczesnym, 32bitowym mikrokontrolerze, z
jedną przestrzenią adresową dla flasha/RAM-u.
Najbardziej logiczna wydaje mi się opcja pierwsza, ale jak mówię - wolę
się upewnić.
Następne wpisy z tego wątku
- 26.08.22 16:40 Dawid Rutkowski
- 26.08.22 20:25 Atlantis
- 26.08.22 21:50 Janusz
- 26.08.22 22:19 Dawid Rutkowski
- 26.08.22 22:34 Grzegorz Niemirowski
- 27.08.22 06:27 JDX
- 27.08.22 06:41 J.F
- 27.08.22 08:10 Atlantis
- 27.08.22 10:28 Dawid Rutkowski
- 27.08.22 11:34 Marek
- 27.08.22 11:53 JDX
- 27.08.22 12:59 Atlantis
- 27.08.22 15:59 Dawid Rutkowski
- 27.08.22 16:06 Dawid Rutkowski
- 27.08.22 16:53 J.F
Najnowsze wątki z tej grupy
- Wietnam wykłada 500M$ i chce zbudować fabrykę za 50G$
- Pendrive zdycha, czy coś jeszcze innego? Problem z plikami.
- Odkurzacz Smapp Dynamic - dawny Zelmer
- Nagra IV i zewnętrzny pilot
- Fejk muzyczny czy nie fejk
- Raspberry Pi 3 Model B+
- Kuchenka elektryczna
- test
- Cewka elektrozaworu
- zapytanie o chip r5f21275nfp
- nie naprawiam więcej telewizorów
- Zrobił TV OLED z TV LCD
- Zasilacz USB na ścianę.
- Gniazdo + wtyk
- Aliexpress zaczął oszukiwać na bezczelnego.
Najnowsze wątki
- 2025-03-19 Brak ograniczeń dla chińskiego kapitału - wam nie do rządu, tylko na zmywak do chińskiej knajpy!!!
- 2025-03-19 Wietnam wykłada 500M$ i chce zbudować fabrykę za 50G$
- 2025-03-19 szal-Unia == federacja policyjna
- 2025-03-19 Polsza == państwo policyjne
- 2025-03-19 Grzegorz Płaczek o programie szczepień dzieci. ,,Stworzono eldorado dla firm farmaceutycznych"
- 2025-03-19 Wietnam wykłada 500M$ i chce zbudować fabrykę za 50G$
- 2025-03-19 Gemini
- 2025-03-19 Mokry sen Zenka :)
- 2025-03-19 Re: Dlaczego tak odstają od Tesli?
- 2025-03-19 Czy grupa p.s.prawo przetrwa najbliższe wybory (prezydenta)?
- 2025-03-19 Warszawa => Frontend Developer (obszar Angular13+) <=
- 2025-03-19 Czy "niedopuszczony pełnomocnik" jest w prawie się na to skarżyć jak "świadek" zmarła bez zostawienia mu takiej instrukcji?
- 2025-03-19 Kraków => Business Development Manager - Network and Network Security
- 2025-03-19 Ostrów Świętokrzy => Node.js / Fullstack Developer <=
- 2025-03-19 Kraków => IT Expert (Network Systems area) <=