Rumah > pembangunan bahagian belakang > C++ > Adakah `std::array` mempunyai saiz dan susun atur memori yang sama seperti tatasusunan C biasa?

Adakah `std::array` mempunyai saiz dan susun atur memori yang sama seperti tatasusunan C biasa?

Barbara Streisand
Lepaskan: 2024-12-06 22:10:13
asal
175 orang telah melayarinya

Does `std::array` have the same size and memory layout as a regular C   array?

Saiz std::array dalam Standard C

Spesifikasi C 11 untuk std::array memastikan storan dan prestasi bersebelahan setanding dengan tatasusunan biasa. Walau bagaimanapun, ia menimbulkan persoalan sama ada std::array mempunyai saiz dan susun atur memori yang sama dengan tatasusunan standard.

Menurut §23.3.2.1/2 standard, tatasusunan ialah agregat yang boleh dimulakan menggunakan sintaks:

std::array<T, N> a = { initializer-list };
Salin selepas log masuk

Sebagai agregat, std::array mesti menyimpan nilai daripada senarai pemula secara langsung. Walaupun secara teorinya mungkin bagi std::array untuk menyimpan data tambahan atau berbeza dalam penjajaran daripada tatasusunan biasa, kemungkinan ini sangat tidak mungkin.

Dalam amalan, kebanyakan penyusun menganggap std::array sebagai blok bersebelahan memori dengan saiz dan susun atur yang sama seperti tatasusunan biasa. Tingkah laku ini disokong oleh dokumentasi pihak ketiga dan diperhatikan dalam pelbagai penyusun.

Sebagai contoh, kod berikut, yang mengakses std::array sebagai penuding tatasusunan berbilang dimensi, berfungsi seperti yang diharapkan:

std::vector<std::array<int, N>> x(M);
typedef int (*ArrayPointer)[N];
ArrayPointer y = (ArrayPointer)&x[0][0];
// use y like normal multidimensional array
Salin selepas log masuk

Berdasarkan pemerhatian ini, ia secara amnya selamat untuk diandaikan bahawa:

sizeof(std::array<int, N>) == sizeof(int) * N
Salin selepas log masuk

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa tingkah laku ini tidak dijamin sepenuhnya oleh standard. Penyusun mempunyai sedikit fleksibiliti dalam cara mereka melaksanakan std::array, dan semakan piawaian akan datang boleh mengubah tingkah laku ini.

Atas ialah kandungan terperinci Adakah `std::array` mempunyai saiz dan susun atur memori yang sama seperti tatasusunan C biasa?. 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