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
Mary-Kate Olsenasal
2024-12-22 08:40:14195semak imbas

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;
}

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