-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erj
e.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!news.mb-net.net!open
-news-network.org!usenet.blueworldhosting.com!feed1.usenet.blueworldhosting.com
!peer01.iad!feed-me.highwinds-media.com!peer02.ams4!peer.am4.highwinds-media.co
m!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!u
nt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Date: Sat, 27 Aug 2022 06:27:50 +0200
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101
Thunderbird/102.2.0
Subject: Re: C - łańcuchy tekstowe definiowane w parametrach funkcji
Newsgroups: pl.misc.elektronika
References: <6308cdf1$0$6193$65785112@news.neostrada.pl>
<4...@g...com>
<63091035$0$560$65785112@news.neostrada.pl>
Content-Language: pl
From: JDX <j...@o...pl>
Organization: N/A
In-Reply-To: <63091035$0$560$65785112@news.neostrada.pl>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Lines: 146
Message-ID: <63099d47$0$6197$65785112@news.neostrada.pl>
NNTP-Posting-Host: 94.42.41.41
X-Trace: 1661574471 unt-rea-a-01.news.neostrada.pl 6197 94.42.41.41:58830
X-Complaints-To: a...@n...neostrada.pl
X-Received-Bytes: 5055
Xref: news-archive.icm.edu.pl pl.misc.elektronika:773954
[ ukryj nagłówki ]On 26.08.2022 20:25, Atlantis wrote:
[...]
> Czy nie istnieje np. ryzyko, że kompilator spróbuje to niejawnie
> zoptymalizować i zdefiniuje sobie we flashy łańcuchu "Lights ", "on"
> oraz "off", a potem będzie tworzył ich kombinacje na stosie, przed
> przekazaniem w argumencie funkcji?
Skompiluj sobie do assemblera z parametrem -fverbose-asm np. taki programik:
===================== CIĄĆ TUTAJ=========================
void send(const char* str);
const int x = 5;
const int a;
int main(int argc, char *argv[])
{
const int y = 7;
static const int z = 8;
const char *s = "dupa";
const int t[] = {1, 2, 3, 4, 5};
send("Lights on");
send("Lights off");
return 0;
}
===================== CIĄĆ TUTAJ=========================
Np. w przypadku ARM-a wychodzi coś takiego:
===================== CIĄĆ TUTAJ=========================
.cpu arm7tdmi
.arch armv4t
.fpu softvfp
.eabi_attribute 20, 1 @ Tag_ABI_FP_denormal
.eabi_attribute 21, 1 @ Tag_ABI_FP_exceptions
.eabi_attribute 23, 3 @ Tag_ABI_FP_number_model
.eabi_attribute 24, 1 @ Tag_ABI_align8_needed
.eabi_attribute 25, 1 @ Tag_ABI_align8_preserved
.eabi_attribute 26, 1 @ Tag_ABI_enum_size
.eabi_attribute 30, 6 @ Tag_ABI_optimization_goals
.eabi_attribute 34, 0 @ Tag_CPU_unaligned_access
.eabi_attribute 18, 4 @ Tag_ABI_PCS_wchar_t
.file "testargt.c"
@ GNU C17 (GNU Toolchain for the Arm Architecture 11.2-2022.02
(arm-11.16)) version 11.2.1 20220111 (arm-none-eabi)
@ compiled by GNU C version 7.3-win32 20180312, GMP version 6.2.1, MPFR
version 3.1.6, MPC version 1.0.3, isl version isl-0.15-1-g835ea3a-GMP
@ GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
@ options passed: -mcpu=arm7tdmi -mfloat-abi=soft -marm -march=armv4t
.text
.global x
.section .rodata
.align 2
.type x, %object
.size x, 4
x:
.word 5
.global a
.align 2
.type a, %object
.size a, 4
a:
.space 4
.align 2
LC0:
.ascii "dupa\000"
.align 2
LC1:
.ascii "Lights on\000"
.align 2
LC2:
.ascii "Lights off\000"
.text
.align 2
.global main
.syntax unified
.arm
.type main, %function
main:
@ Function supports interworking.
@ args = 0, pretend = 0, frame = 16
@ frame_needed = 1, uses_anonymous_args = 0
push {fp, lr} @
add fp, sp, #4 @,,
sub sp, sp, #16 @,,
str r0, [fp, #-16] @ argc, argc
str r1, [fp, #-20] @ argv, argv
@ testargt.c:8: const int y = 7;
mov r3, #7 @ tmp115,
str r3, [fp, #-8] @ tmp115, y
@ testargt.c:10: const char *s = "dupa";
ldr r3, .L3 @ tmp116,
str r3, [fp, #-12] @ tmp116, s
@ testargt.c:13: send("Lights on");
ldr r0, .L3+4 @,
bl send @
@ testargt.c:14: send("Lights off");
ldr r0, .L3+8 @,
bl send @
@ testargt.c:16: return 0;
mov r3, #0 @ _6,
@ testargt.c:17: }
mov r0, r3 @, <retval>
sub sp, fp, #4 @,,
@ sp needed @
pop {fp, lr} @
bx lr @
L4:
.align 2
L3:
.word .LC0
.word .LC1
.word .LC2
.size main, .-main
.section .rodata
.align 2
.type t.0, %object
.size t.0, 20
t.0:
.word 1
.word 2
.word 3
.word 4
.word 5
.align 2
.type z.1, %object
.size z.1, 4
z.1:
.word 8
.ident "GCC: (GNU Toolchain for the Arm Architecture 11.2-2022.02
(arm-11.16)) 11.2.1 20220111"
===================== CIĄĆ TUTAJ=========================
Jak widać, stringi lądują w sekcji .rodata (czasami nazywanej też
rdata), która w przypadku systemów embedded zazwyczaj jest umieszczana
we Flashu (aczkolwiek ktoś na starcie systemu może chcieć skopiować ją
do SRAM, bo odczyty z SRAM są szybsze). I tak jest ,,wszędzie". Natomiast
const-y ,,typów prostych" zazwyczaj również lądują w .rodata, ale nie
zawsze - na ARM (jak widać) czy na x86-64 tak, ale na MIPS już nie
(tutaj w sekcji .sdata - ,,small data").
Powyższe dotyczy oczywiście jedynie słusznego kompilatora, czyli gcc.
Następne wpisy z tego wątku
- 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
- 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
Najnowsze wątki z tej grupy
- Jaki trojfazowy licznik tuya lub podobny?
- Problem z dekoderem adresów
- Intel się wyprzedaje: po 10latach pchnęli pakiet kontrolny Altery za 1/4 kwoty zakupu
- Korekcja perspektywy
- Wentylator zabija zasilacze LEDek?
- Re: Kompensacja mocy biernej przy 230VAC
- Totaliztyczny obowiązek naprawy maszyn i urządzeń
- Niby uziom ale nie
- Położyłem dwa telefony obok siebie
- Przekaźnik na szynę DIN (?)
- Taśma LED
- Jak odróżnić myjki wibrujące od ultradźwiękowych.
- Ledy na wyłączniku czasowym błyskają
- Re: Kompensacja mocy biernej przy 230VAC
- Re: Kompensacja mocy biernej przy 230VAC
Najnowsze wątki
- 2025-04-17 Cła Trumpa już w sądzie federalnym USA
- 2025-04-16 Jaki trojfazowy licznik tuya lub podobny?
- 2025-04-16 co ile czasu rysa?
- 2025-04-16 co ile czasu rysa?
- 2025-04-16 cytat: "Za prezydentury Władimira Putina co najmniej 37 dziennikarzy zostało zamordowanych z powodu swojej pracy."
- 2025-04-16 Przyczyny
- 2025-04-16 Re: "Wazelina": Donald Tusk trzęsie giełdą jak mały Donald Trump [do -9%]
- 2025-04-16 Motodziennik #322 Audi Q9, Omoda 3, MG Cyber X - oraz koniec Leapmotor, Citana oraz auto od Amazona
- 2025-04-16 Do sądu trafił pozew zbiorowy przeciw Google'owi - oskarżenie o praktyki monopolistyczne na rynku reklamy internetowej
- 2025-04-16 Francja: "Za mało pracujemy, za dużo wydajemy" - a pierwsi chcieli pracować 4/7 !!!
- 2025-04-16 To już koniec 30letniej firmy Ekolot z Krosna - to kolejna ofiara urzędników
- 2025-04-16 To już koniec 30letniej firmy Ekolot z Krosna - to kolejna ofiara urzędników
- 2025-04-16 Francja: "Za mało pracujemy, za dużo wydajemy" - a pierwsi chcieli pracować 4/7 !!!
- 2025-04-16 Polska na 3 miejscu pod względem inflacji w UE!!!
- 2025-04-16 Do sądu trafił pozew zbiorowy przeciw Google'owi - oskarżenie o praktyki monopolistyczne na rynku reklamy internetowej