Jadual Kandungan
Kes 3
Contoh kod
Output 2
Rumah pembangunan bahagian belakang C++ Mengapa dalam C/C++, saiz struktur tidak sama dengan jumlah saiz setiap ahli?

Mengapa dalam C/C++, saiz struktur tidak sama dengan jumlah saiz setiap ahli?

Aug 26, 2023 am 09:29 AM
Struktur c/c++ sizeof

Saiz elemen jenis struktur yang diperolehi oleh

sizeof() tidak selalu sama dengan saiz setiap ahli individu. Kadangkala pengkompil menambah beberapa padding untuk mengelakkan masalah penjajaran. Jadi dimensi mungkin berubah. Padding ditambah apabila anggota struktur diikuti oleh anggota bersaiz lebih besar atau berada di hujung struktur. Penyusun yang berbeza mempunyai jenis kekangan penjajaran yang berbeza. Dalam standard C, jumlah struktur penjajaran adalah bergantung kepada pelaksanaan.

Kes 1

Dalam kes ini, z berganda ialah 8 bait panjang, iaitu lebih besar daripada x (4 bait). Jadi 4 bait lagi padding ditambah. Selain itu, data jenis pendek y mempunyai 2 bait ruang dalam ingatan, jadi 6 bait tambahan ditambah sebagai padding.

Mengapa dalam C/C++, saiz struktur tidak sama dengan jumlah saiz setiap ahli?

Contoh kod

#include <stdio.h>
struct myStruct {
   int x; //Integer takes 4 bytes, and padding 4 bytes
   double z; //Size of double is 8-byte, no padding
   short int y; //Size of short is 2-byte, padding 6-bytes
};
main() {
   printf("Size of struct: %d", sizeof(struct myStruct));
}
Salin selepas log masuk

Output 2

Size of struct: 24
Salin selepas log masuk

Kes 2

Dalam kes ini, pertama kali ganda dimasukkan, yang mengambil 8 bait ruang. Kini integer x (4 bait) ditambah. Jadi masih ada lagi 4 bait ruang. Selepas menambah y pendek, ia boleh dimasukkan ke dalam 4 bait ruang tambahan, mengambil sejumlah 16 bait ruang.

Mengapa dalam C/C++, saiz struktur tidak sama dengan jumlah saiz setiap ahli?

Contoh kod

#include <stdio.h>
struct myStruct {
   double z; //Size of double is 8-byte, no padding
   int x; //Integer takes 4 bytes, and padding 4 bytes
   short int y; //Size of short is 2-byte, padding 6-bytes
};
main() {
   printf("Size of struct: %d", sizeof(struct myStruct));
}
Salin selepas log masuk

Output 2

Size of struct: 16
Salin selepas log masuk
Salin selepas log masuk

Kes 3

Kes ketiga juga menggunakan 16 bait ruang memori, tetapi disusun secara berbeza. Oleh kerana ahli pertama adalah berganda, ia diletakkan dahulu, dan kemudian data jenis pendek ditambah. Kini, apabila integer cuba dimasukkan, ia boleh diletakkan ke dalam kawasan 6-bait yang tinggal. Oleh itu, terdapat padding selepas pendek, tetapi tiada padding selepas data integer.

Mengapa dalam C/C++, saiz struktur tidak sama dengan jumlah saiz setiap ahli?

Contoh kod

#include <stdio.h>
struct myStruct {
   double z; //Size of double is 8-byte, no padding
   short int y; //Size of short is 2-byte, padding 6-bytes
   int x; //Integer takes 4 bytes, and padding 4 bytes
};
main() {
   printf("Size of struct: %d", sizeof(struct myStruct));
}
Salin selepas log masuk

Output 2

Size of struct: 16
Salin selepas log masuk
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa dalam C/C++, saiz struktur tidak sama dengan jumlah saiz setiap ahli?. 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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah perbezaan antara Structure dan Array dalam bahasa C? Apakah perbezaan antara Structure dan Array dalam bahasa C? Aug 30, 2023 pm 09:37 PM

Dalam C, kedua-dua struktur dan tatasusunan digunakan sebagai bekas jenis data, iaitu, dalam kedua-dua struktur dan tatasusunan kita boleh menyimpan data dan melaksanakan operasi yang berbeza pada mereka. Berdasarkan pelaksanaan dalaman, berikut adalah beberapa perbezaan asas antara keduanya. Sr. Susunan Struktur Kunci Nombor 1 Definisi Struktur boleh ditakrifkan sebagai struktur data yang digunakan sebagai bekas dan boleh memuatkan pembolehubah pelbagai jenis. Array, sebaliknya, ialah struktur data yang digunakan sebagai bekas yang boleh menyimpan pembolehubah daripada jenis yang sama tetapi tidak menyokong pembolehubah jenis data berbilang. 2 Peruntukan Memori Struktur peruntukan memori untuk data input tidak perlu berada di lokasi memori bersebelahan. Manakala dalam kes tatasusunan, data input disimpan dalam peruntukan memori bersebelahan, yang bermaksud tatasusunan menyimpan data dalam model memori yang memperuntukkan blok memori bersebelahan (iaitu, mempunyai

Pemindahan kuat struktur Golang: penerangan terperinci tentang prinsip dan teknik pelaksanaan Pemindahan kuat struktur Golang: penerangan terperinci tentang prinsip dan teknik pelaksanaan Apr 03, 2024 pm 03:09 PM

Paksaan struktur di Golang adalah untuk menukar nilai satu jenis struktur kepada jenis yang lain. Ini boleh dicapai melalui teknik seperti pemindahan daya penegasan, pemindahan daya pantulan, dan pemindahan daya tidak langsung penunjuk. Paksaan penegasan menggunakan penegasan jenis, paksaan reflektif menggunakan mekanisme refleksi, dan paksaan tidak langsung penunjuk mengelakkan penyalinan nilai. Langkah-langkah khusus ialah: 1. Pemindahan daya penegasan: gunakan sintaks penegasan jenis 2. Pemindahan daya pantulan: gunakan reflect.Type.AssignableTo dan reflect.Value.Convert fungsi;

Kaedah aplikasi dan operasi struktur dalam PHP Kaedah aplikasi dan operasi struktur dalam PHP Jul 16, 2023 pm 11:21 PM

Apabila bahasa PHP terus berkembang dan berkembang, kaedah aplikasi dan operasi struktur dalam PHP menjadi semakin lengkap. Selain pembolehubah dan tatasusunan biasa, PHP juga menyediakan jenis data yang lebih fleksibel, iaitu struktur. Struktur ialah jenis data komposit yang terdiri daripada berbilang ahli data daripada jenis yang berbeza. Ia boleh menggabungkan data berkaitan untuk membentuk data yang lebih lengkap dan berstruktur. Dalam PHP, anda boleh mensimulasikan tingkah laku dan kefungsian struktur dengan menggunakan kelas dan objek. Pertama, mari kita lihat bagaimana

Tukar struktur kepada rentetan JSON menggunakan fungsi json.Marshal Tukar struktur kepada rentetan JSON menggunakan fungsi json.Marshal Jul 24, 2023 pm 12:54 PM

Gunakan fungsi json.Marshal untuk menukar struktur kepada rentetan JSON Dalam bahasa Go, anda boleh menggunakan fungsi json.Marshal untuk menukar struktur menjadi rentetan JSON. Struktur ialah jenis data yang terdiri daripada berbilang medan, dan JSON ialah format pertukaran data ringan yang biasa digunakan. Menukar struktur kepada rentetan JSON memudahkan pertukaran data antara sistem yang berbeza. Berikut ialah contoh kod: packagemainimport(&q

Penggunaan kesatuan dan struktur tanpa nama dalam bahasa C Penggunaan kesatuan dan struktur tanpa nama dalam bahasa C Sep 16, 2023 pm 06:45 PM

Di sini kita melihat apa itu kesatuan dan struktur tanpa nama dalam bahasa C. Kesatuan dan struktur tanpa nama ialah kesatuan dan struktur yang tidak dinamakan. Oleh kerana mereka tidak mempunyai nama, kita tidak boleh mencipta objek langsungnya. Kami menggunakannya sebagai struktur bersarang atau kesatuan. Ini adalah contoh kesatuan dan struktur tanpa nama. struct{ datatypevariable; ...};union{ datatypevariable ...};Dalam contoh ini, kami sedang mencipta

Apakah perbezaan antara php dan c# Apakah perbezaan antara php dan c# Jun 02, 2023 pm 01:45 PM

Perbezaan antara php dan c# ialah: 1. Sistem jenis bahasa adalah berbeza, PHP adalah dinamik, manakala C# adalah jenis statik 2. Platform yang digunakan adalah berbeza, PHP boleh mencapai cross-platform, manakala C# adalah eksklusif untuk Windows 3; . Paradigma pengaturcaraan adalah berbeza, PHP Ia menyokong pengaturcaraan berorientasikan objek, prosedural dan berfungsi, dan C# lebih cenderung kepada pengaturcaraan berorientasikan objek 4. Kelajuan pelaksanaan berbeza, PHP lebih cepat, dan C# agak perlahan; Senario aplikasi adalah berbeza, PHP digunakan dalam pembangunan web, pelayan, dll. C# digunakan untuk desktop Windows dan aplikasi web.

Gunakan fungsi json.Unmarshal untuk menghuraikan rentetan JSON ke dalam struktur Gunakan fungsi json.Unmarshal untuk menghuraikan rentetan JSON ke dalam struktur Jul 25, 2023 pm 10:49 PM

Gunakan fungsi json.Unmarshal untuk menghuraikan rentetan JSON ke dalam struktur Dalam bahasa Go, anda boleh menggunakan fungsi json.Unmarshal untuk menghuraikan rentetan JSON ke dalam struktur. Ini adalah ciri yang sangat berguna, terutamanya apabila memproses respons API atau membaca fail konfigurasi. Pertama, kita perlu menentukan jenis struktur untuk mewakili struktur objek JSON yang ingin kita huraikan. Katakan kita mempunyai rentetan JSON berikut: {"name"

Buat alat pemformatan kod C/C++ menggunakan alat Clang Buat alat pemformatan kod C/C++ menggunakan alat Clang Aug 26, 2023 pm 01:09 PM

Dalam tutorial ini, kami akan membincangkan program untuk mencipta alat pemformatan kodC/C++dengan alat bantuanhelpofclang.SETUPsudoaptinstallpythonsudoaptinstallclang-format-3.5 Kami kemudiannya akan mencipta fail Python di lokasi yang pengguna semasa mempunyai kebenaran membaca dan menulis. Contoh importoscpp_extensions=(".cxx",".cpp&

See all articles