User Tag List

+ Trả lời chủ đề
Hiện kết quả từ 1 tới 9 của 9

Chủ đề: Thắc mắc về kích thước của biến trong struct

  1. #1
    Điều hành viên Avatar của iexplore
    Tham gia ngày
    Sep 2010
    Bài gửi
    208

    Mặc định Thắc mắc về kích thước của biến trong struct

    Chương trình:
    PHP Code:
    #include <stdio.h>
    int main()
    {
        
    int a;
        
    struct char ten[10];} s1;
        
    struct int x; } s2;
        
    struct char ten[10]; int x;} s3;
        
    printf("%d\n"sizeof(a));
        
    printf("%d\n"sizeof(s1));
        
    printf("%d\n"sizeof(s2));
        
    printf("%d\n"sizeof(s3));

    Kết quả:
    PHP Code:
    4
    10
    4
    16 
    3 ví dụ trên chứng tỏ kích thước của kiểu int là 4, của char là 1, khi cho vào struct thì không thay đổi.
    Còn struct s3 bao gồm cả int và char thì lại có kích thước là 16 byte (đáng nhẽ phải là 10*1+1*4=14)??? Không hiểu nổi!
    Tương tự như một câu trong đề thi tin đại cương năm ngoái
    Câu 12: Cho khai báo
    struct quoc_gia
    { char ten[31];
    char thu_do[31];
    int dan_so;
    }dsqg[10];
    Mảng dsqg chiếm số byte trong bộ nhớ là:
    [a] 440 [c] 640
    [b] 460 [d] 660
    trong topic này: http://svbk.vn/t/44255-De-thi-Tin-DC-cuoi-ky

  2. #2
    svBK's Member
    Tham gia ngày
    Nov 2011
    Bài gửi
    27

    Mặc định Re: Thắc mắc về kích thước của biến trong struct

    chú dân công nghệ thông tin mà như thế ak?
    câu đề năm ngoái chọn 640 hâh

  3. #3
    Điều hành viên Avatar của iexplore
    Tham gia ngày
    Sep 2010
    Bài gửi
    208

    Mặc định Re: Thắc mắc về kích thước của biến trong struct

    Quote Nguyên văn bởi cô độc Xem bài viết
    chú dân công nghệ thông tin mà như thế ak?
    câu đề năm ngoái chọn 640 hâh
    Không biết giải thích thì đừng vô đây

  4. #4
    svBK's Member
    Tham gia ngày
    Nov 2011
    Bài gửi
    27

    Mặc định Re: Thắc mắc về kích thước của biến trong struct

    bạn khanh sao vậy.?tên và thủ đô có 31 kí tự nhưng nó đk cấp phát bộ nhớ là 32 vì còn 1 kí tự kết thúc là null hay đại loại là thế.ok

  5. #5
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Thắc mắc về kích thước của biến trong struct

    Quote Nguyên văn bởi iexplore Xem bài viết
    3 ví dụ trên chứng tỏ kích thước của kiểu int là 4, của char là 1, khi cho vào struct thì không thay đổi.
    Còn struct s3 bao gồm cả int và char thì lại có kích thước là 16 byte (đáng nhẽ phải là 10*1+1*4=14)??? Không hiểu nổi!
    , xác nhận là mình chạy đoạn code trên cũng ra kết quả tương tự. Sao lại thế nhỉ? Mình được học kích thước của kiểu int là 2 byets cơ mà?

    Trường hợp kích thước của s3 cũng khó hiểu quá
    Contact me:
    Email: sangnd [at] svBK.vn
    Personal website: My Blog | Chat với người lạ
    Facebook Page của Bách Khoa Forum: http://www.facebook.com/svbk.vn

  6. #6
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Thắc mắc về kích thước của biến trong struct

    Vừa tìm hiểu thấy bài này có lẽ sẽ lý giải được

    *********************************

    Kiểu int (integer) là kiểu chuẩn có kích thước tùy theo compiler.
    Compiler 16bit thì int rộng 16bit = 2byte.
    Với 32bit và 64bit thì kích thước int sẽ tùy thuộc vào mô hình dữ liệu mà compiler implement: LP (long/pointer), ILP (int/long/pointer), LLP (long long/pointer)

    Mã:
     Data Type 	  	 LP32 	 ILP32 	 ILP64 	 LLP64 	 LP64
     char 	  	  	 8 	 8 	 8 	 8 	 8
     short 	  	  	 16 	 16 	 16 	 16 	 16
     int32 	  	  	  	  	 32 	  	 
     int 	  	  	 16 	 32 	 64 	 32 	 32
     long 	  	  	 32 	 32 	 64 	 32 	 64
     long long (int64) 	  	  	  	 64 	 
     pointer 	  	 32 	 32 	 64 	 64 	 64

  7. Tớ cảm ơn 1973 đã chia sẻ.


  8. #7
    NV xóa quảng cáo - Spam Avatar của lampsea12
    Tham gia ngày
    May 2011
    Bài gửi
    577

    Mặc định Re: Thắc mắc về kích thước của biến trong struct

    Thế thì bài này phải làm theo 16 bit r Sang nhỉ!
    A true Blue......

  9. #8
    Điều hành viên Avatar của iexplore
    Tham gia ngày
    Sep 2010
    Bài gửi
    208

    Mặc định Re: Thắc mắc về kích thước của biến trong struct

    t đã biết là trong trình biên dịch 32 bit, int có kích thước là 4 byte. Còn trong trình biên dịch 16-bit như tcc trong Turbo C++ kích thước của biến int là 2 byte. Chỉ khó hiểu mỗi ví dụ s3. Bó tay .com

  10. #9
    HUT's Engineer
    Tham gia ngày
    Jun 2011
    Bài gửi
    686

    Mặc định Re: Thắc mắc về kích thước của biến trong struct

    bó tay con cò bay, đặt câu hỏi mà giọng hống hách gớm.

    Cái này là data alignment.

    ở CPU 32 bít, chỉ cho lấy dữ liệu ở địa chỉ chia hết cho 4 thôi, nếu muốn lấy giá trị nguyên ở ô nhớ thứ 2 (không chia hết cho 4) thì CPU phải lấy 2 lần, lần 1 lấy giá trị ở ô thứ 0, lần 2 lấy giá trị ở ô thứ 4, sau đó bỏ bớt các bít thừa thì dc số nguyên ở ô nhớ thứ 2.

    do vậy để cho nhanh chóng, rất ít (có thể là ko có) trình biên dịch đặt biến ở các vị trí lẻ, trong cấu trúc, người ta cũng tổ chức sao cho tối ưu nhất, tức là size của nó chia hết cho 4, lấy vài cái là dc luôn, không phải sử lý gì cả., nếu size = 15 thì nó cho thành 16. Do vậy cải thiện dc tốc độ, nhưng tốn bộ nhớ hơn.

+ Trả lời chủ đề

Thông tin chủ đề

Users Browsing this Thread

Hiện có 1 người đọc bài này. (0 thành viên và 1 khách)

Chủ đề tương tự

  1. lv3 trong deche.vn chỉ trong 19h
    Gửi bởi denosagas trong mục Game Online
    Trả lời: 0
    Bài cuối: 01-07-2009, 08:31 PM

Từ khóa (Tag) của chủ đề này

Quyền viết bài

  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình


About svBK.VN

    Bách Khoa Forum - Diễn đàn thảo luận chung của sinh viên ĐH Bách Khoa Hà Nội. Nơi giao lưu giữa sinh viên - cựu sinh viên - giảng viên của trường.

Follow us on

Twitter Facebook youtube