


Mengapa dalam C/C++, saiz struktur tidak sama dengan jumlah saiz setiap ahli?
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.
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)); }
Output 2
Size of struct: 24
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.
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)); }
Output 2
Size of struct: 16
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.
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)); }
Output 2
Size of struct: 16
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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

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;

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

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

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

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

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&
