Mengapa Huruf Rentetan Merentasi Unit Terjemahan Mempunyai Alamat Memori Berbeza?

Linda Hamilton
Lepaskan: 2024-11-04 19:08:01
asal
481 orang telah melayarinya

Why Do String Literals Across Translation Units Have Different Memory Addresses?

Rentetan Alamat Literal Tidak Padan Merentas Unit Terjemahan

Dalam C dan C , sering diandaikan bahawa rentetan literal dalam unit terjemahan yang berbeza (fail objek dicipta semasa penyusunan) akan mempunyai alamat memori yang sama. Walau bagaimanapun, idea ini tidak mudah alih merentas pengkompil dan pelaksanaan.

Menurut piawaian draf C99 dan C, gelagat berkenaan literal rentetan yang sama dibiarkan secara eksplisit tidak dinyatakan. Ini bermakna pengkompil bebas untuk mengumpulkan atau menggabungkannya atau mencipta kejadian berasingan untuk setiap rujukan.

Visual Studio secara eksplisit membenarkan pengumpulan literal rentetan melalui pilihan pengkompil /GF, manakala GCC menyokongnya dengan pemalar -fmerge bendera. Walau bagaimanapun, kedua-dua penyusun menggunakan ciri ini secara bersyarat, bergantung pada ketersediaan perkakasan atau sokongan pemaut tertentu.

Oleh itu, tidak mudah alih untuk bergantung pada alamat memori yang sama untuk literal rentetan merentas unit terjemahan yang berbeza. Walaupun dalam unit terjemahan yang sama, pengoptimuman pengkompil mungkin membawa kepada tingkah laku yang tidak dapat diramalkan apabila berurusan dengan literal rentetan.

Kekurangan penyeragaman ini timbul daripada sifat pelaksanaan C yang pelbagai pada masa pembangunan bahasa. Memandangkan sistem berasaskan ROM memerlukan literal rentetan untuk disimpan dalam ingatan baca sahaja, ia dianggap tidak praktikal untuk menjamin keunikan dan kebolehtulisan literal rentetan.

Atas ialah kandungan terperinci Mengapa Huruf Rentetan Merentasi Unit Terjemahan Mempunyai Alamat Memori Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan