-
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
- Szok
- Dziwny schemat wzmacniacza m.cz.
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- CGNAT i ewentualne problemy
- wzmacniacz mocy
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- Propagation velocity v/c dla kabli RF
- Jakie natynkowe podwójne gniazdo z bolcem (2P+PE)
- Czujnik nacisku
- Protoków komunikacyjny do urządzenia pomiarowego
- Hiszpania bez pradu
- amperomierz w plusie
- 3G-nadal działa
- Historia pewnego miernika kalibratora
- Ustym 4k Pro i wyświetlacz
Najnowsze wątki
- 2025-06-02 Wrocław => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-06-01 jaki kretyn boziu uśpić :)
- 2025-06-01 Zdolny to legalnego prowadzenia samochodu w Anglii wykluczony z komisji wyborczej w Białymstoku
- 2025-06-01 nie ustąpiła moturowi?
- 2025-05-31 Skoro jest tak dobrze i TANIO to dlaczego jeszcze nie jeździmy na takich akumulatorach?
- 2025-05-31 Warszawa => IT Data Analyst (obszar Power BI) <=
- 2025-05-31 Warszawa => IT Hardware Specialist - Wsparcie i Konfiguracja <=
- 2025-05-31 Środa Wielkopolska => Konsultant wewnętrzny SAP FI/CO <=
- 2025-05-31 Gdańsk => PHP Developer <=
- 2025-05-31 Lublin => Delphi Programmer <=
- 2025-05-31 co to za obcęgi? [OT]
- 2025-05-30 Rondo :)
- 2025-05-30 Warszawa => Senior Account Manager <=
- 2025-05-30 Warszawa => Senior C++ Developer (analiza numeryczna i modelowanie) <=
- 2025-05-30 Gdańsk => Team Lead Data Engineer (Snowflake) <=