Rumah >pembangunan bahagian belakang >C++ >Adakah Piawaian C Menjamin Saiz dan Reka Letak Memori yang Sama untuk `std::array` dengan Tatasusunan Terbina Dalam?

Adakah Piawaian C Menjamin Saiz dan Reka Letak Memori yang Sama untuk `std::array` dengan Tatasusunan Terbina Dalam?

Linda Hamilton
Linda Hamiltonasal
2024-11-19 22:36:031037semak imbas

Does the C   Standard Guarantee the Same Size and Memory Layout for `std::array` as for Built-in Arrays?

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) &amp;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!

Kenyataan:
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