Rumah >pembangunan bahagian belakang >C++ >Adakah Piawaian C Menjamin Saiz dan Reka Letak Memori yang Sama untuk `std::array` dengan Tatasusunan Terbina Dalam?
Adakah C Standard Menentukan Saiz std::array?
Dalam C 11, std::array menawarkan storan bersebelahan dengan prestasi yang setanding kepada tatasusunan biasa. Walau bagaimanapun, tidak jelas sama ada saiz std::array dan susun atur memori mencerminkan tatasusunan biasa.
Keperluan Standard
Standard C (§23.3.2.1/2) mentakrifkan tatasusunan sebagai agregat yang dimulakan melalui:
array<T, N> a = { initializer-list };
Sebagai agregat, std::array tidak boleh menggunakan pembina untuk menukar data dalam senarai pemula. Ini menunjukkan bahawa ia terutamanya menyimpan nilai data sebenar.
Kelakuan Khusus Pelaksanaan Potensi
Secara teknikal, susunan std::array boleh memasukkan data tambahan atau bukan -penjajaran standard, yang akan menyimpang daripada gelagat tatasusunan biasa.
Sebagai contoh, pengkompil boleh menambah nilai sentinel pada penghujung tatasusunan std:: untuk mengesan percubaan menulis di luar sempadan. Sebagai alternatif, penjajaran super (cth., arahan Intel SSE) boleh disokong oleh std::array tetapi bukan oleh tatasusunan terbina dalam.
Gelagat Yang Dijangka
Secara umum, anda boleh menjangkakan kod berikut berfungsi seperti yang dimaksudkan:
std::vector< std::array<int, N> > x(M); typedef int (*ArrayPointer)[N]; ArrayPointer y = (ArrayPointer) &x[0][0]; // Use y as a multidimensional array
Kebanyakan penyusun (cth., GNU dan Intel) mematuhi gelagat ini. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa piawaian tidak menjamin susun atur memori yang sama secara eksplisit untuk std::array dan tatasusunan biasa.
Atas ialah kandungan terperinci Adakah Piawaian C Menjamin Saiz dan Reka Letak Memori yang Sama untuk `std::array` dengan Tatasusunan Terbina Dalam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!