Rentetan Alamat Literal Merentas Unit Terjemahan
Dalam C dan C , pengaturcara sering menggunakan literal rentetan untuk pelbagai tujuan. Soalan biasa timbul: adakah boleh dipercayai untuk menganggap bahawa rentetan literal yang sama dalam unit terjemahan yang berbeza akan mempunyai alamat memori yang sama?
C/C Standard
C99 dan piawaian draf C secara khusus membiarkan topik ini tidak ditentukan. Bahagian 6.4.5 standard draf C99 menyatakan bahawa "Ia tidak ditentukan sama ada tatasusunan ini [literal rentetan] adalah berbeza dengan syarat elemennya mempunyai nilai yang sesuai." Ini bermakna pengkompil bebas untuk memutuskan sama ada untuk mengumpulkan literal rentetan atau tidak.
Pelaksanaan Pengkompil
Dalam praktiknya, pengkompil yang berbeza mempunyai gelagat berbeza berkenaan penghimpunan literal rentetan.
Rasional untuk Kekurangan Keperluan
Rasional untuk tidak memerlukan literal rentetan untuk dikumpulkan dalam standard C adalah disebabkan oleh kepelbagaian penyusun dan persekitaran masa jalan pada masa itu. Sesetengah pelaksanaan menyimpan literal rentetan dalam ROM, manakala yang lain menyimpannya dalam bahagian data boleh tulis. Untuk memastikan kemudahalihan, adalah dianggap terbaik untuk tidak mewajibkan sebarang kelakuan tertentu.
Pertimbangan Praktikal
Secara amnya, tidak mudah alih untuk bergantung pada literal rentetan yang mempunyai perkara yang sama alamat memori merentas unit terjemahan. Walau bagaimanapun, dalam unit terjemahan yang sama, tingkah laku lebih berkemungkinan konsisten, kerana pengkompil mempunyai lebih kawalan ke atas pengoptimuman.
Kesimpulan
Alamat memori a literal rentetan ialah butiran pelaksanaan dan tidak boleh dipercayai untuk kekal konsisten merentas unit terjemahan. Adalah penting untuk mengetahui fakta ini dan menulis kod yang bebas daripada butiran pelaksanaan tersebut.
Atas ialah kandungan terperinci Adakah Alamat Memori Rentetan Tersurat Konsisten Merentas Unit Terjemahan dalam C dan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!