C boyutu iç mekanizması?
C bir yapı boyutunu almak için boyutu kullanıyorum ama aldığım sonuç beklemiyordum.
struct sdshdr {
int len;
int free;
char buf[];
};
int main(){
printf("struct len:%d\n",(sizeof(struct sdshdr)));
return 0;
} //struct len:8, with or without buf
benim sorum neden buf
herhangi bir yer işgal etmez neden int
tipi boyutunu hala bir 64-bit üzerinde 4 CPU.
burada gcc -v
: çıktı
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c /4.2.1
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.4.0
Thread model: posix
CEVAP
[]esnek bir dizi üye. C standardı açıkça öyle diyor çünkü yapının toplam boyutu sayılmaz, değil:
6.7.2.1/18
Özel bir durum, birden fazla üye adında bir yapısı son öğesi olabilir tamamlanmamış bir dizi türü var; bu esnek bir dizi üye denir. Çoğu durumda, esnek dizi üyesinin göz ardı edilir. Özellikle, yapısı, boyutu gibi. esnek dizi üyesinin daha fazla doldurma izleyen var olabilir dışında atlanmış ihmal etmek anlamına gelir.
Bu esnek dizi üyesinin amacı, dinamik yapı sonra sonunda veri ayırmak için izin çünkü tasarım gereği, kasıtlı. Yapı, bir dosya Başlığı (zaman, başlık protokol vb.)
Example tartışma da dahil olmak üzere standart dışı gcc uzantıları ve eski pre-C99 "". yapı hack
Nasıl bir değer boyutu 8 bit daha büyü...
Matrix OpenCV boyutu...
'/yeniden boyutlandırmak için en ...
== Boyutu(numaralama) boyutu(int), her...
Ölümcül Hata: Bellek Boyutu 134217728 ...