Rumah > pembangunan bahagian belakang > C++ > Berapa Banyak Overhed Yang Sebenarnya Ada Peruntukan Tatasusunan-Baharu?

Berapa Banyak Overhed Yang Sebenarnya Ada Peruntukan Tatasusunan-Baharu?

Mary-Kate Olsen
Lepaskan: 2024-12-22 08:40:14
asal
253 orang telah melayarinya

How Much Overhead Does Placement-New Array Allocation Really Have?

Penempatan-Baharu dan Tidak Ditentukan Tatasusunan Overhed

Piawaian C 11 menentukan bahawa ungkapan penempatan-baru new(buffer) T[5] akan menghasilkan panggilan kepada operator baru[](saiz(T)*5 y,penampan) dengan x dan y bukan negatif, nilai yang tidak ditentukan mewakili overhed peruntukan tatasusunan.

Walau bagaimanapun, ini menimbulkan kebimbangan apabila menggunakan peletakan-baharu dengan penimbal yang telah diperuntukkan sebelumnya. Jika y lebih besar daripada 0, penimbal yang diperuntukkan mungkin tidak cukup besar untuk menampung tatasusunan.

Menentukan Overhed Peruntukan Tatasusunan

Memandangkan piawaian tidak menjamin nilai y, ia adalah penting untuk menentukannya semasa runtime. Satu pendekatan ialah mencipta pengendali baharu peletakan tersuai yang menyemak ruang penimbal yang tersedia.

inline void* operator new[](std::size_t n, void* p, std::size_t limit)
{
    if (n <= limit)
        std::cout << "life is good\n";
    else
        throw std::bad_alloc();
    return p;
}
Salin selepas log masuk

Dengan mengubah saiz tatasusunan dan memeriksa n dalam operator baharu tersuai, anda boleh membuat kesimpulan nilai y untuk anda platform.

Standard Kemas Kini

Adalah penting untuk ambil perhatian bahawa laporan kecacatan telah membetulkan isu ini pada November 2019, menjadikannya retroaktif kepada semua versi C . Mengikut piawaian yang dikemas kini, overhed untuk operator new[](std::size_t, void* p) sentiasa sifar.

Oleh itu, apabila menggunakan operator function library new[](std::size_t, void*), anda boleh pra-peruntukkan penimbal anda dengan saiz yang tepat tanpa perlu risau tentang overhed peruntukan yang tidak ditentukan.

Atas ialah kandungan terperinci Berapa Banyak Overhed Yang Sebenarnya Ada Peruntukan Tatasusunan-Baharu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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