Nguyên mẫu của bộ nhớ là void *memset(void *s, int c, size_t n);
. Vậy tại sao tham số thứ ba là loại size_t
? memset
chỉ là một ví dụ, tôi muốn nhiều lý do chung hơn. Cảm ơn trước.Tại sao các thông số chức năng của loại size_t?
Trả lời
size_t
là loại trả về của toán tử sizeof
và được sử dụng để mô tả kích thước bộ nhớ. Trong trường hợp của memset
, nó chỉ định số byte (n) trong (các) khối bộ nhớ sẽ được đặt thành giá trị đã cho (c).
Kích thước theo bit của size_t
thay đổi dựa trên không gian địa chỉ của nền tảng đích. Nó không phải luôn luôn tương quan với kích thước đăng ký. Ví dụ, trong kiến trúc bộ nhớ phân đoạn, sizeof (size_t)
có thể nhỏ hơn sizeof (void *)
. Thông thường, size_t
sẽ là 4 byte trên máy 32 bit, 8 byte trên máy 64 bit, v.v.
Bạn có thể giải thích thêm về lý do tại sao 'sizeof (size_t) có thể là nhỏ hơn sizeof (void *) '? Cảm ơn rất nhiều;) – Grissiom
Trong bộ nhớ phân đoạn, kích thước của mỗi phân đoạn nhỏ hơn tổng kích thước bộ nhớ. Ví dụ: trong một 80286 bạn có thể xử lý 2^24 tổng số byte nhưng chỉ sử dụng 2^16 byte liền kề trong mỗi phân đoạn. Xem http://en.wikipedia.org/wiki/Memory_segmentation Bây giờ, tôi không có 80286 trình biên dịch C99 tiện dụng, nhưng tôi đoán rằng sizeof (size_t) == 2 và sizeof (void *) == 4. –
Vì vậy, nó sẽ là gì khi tôi cố gắng để nhớ 2^20 byte trong 80286? Mặc dù nó quá lớn nhưng tôi nghĩ rằng nó có ý nghĩa bởi vì chúng tôi có thể giải quyết 2^24 byte. – Grissiom
size_t
là loại được sử dụng để biểu thị kích thước của đối tượng. Trong các kích cỡ C của các kiểu số nguyên (int
, long
, v.v.) phụ thuộc vào việc triển khai thực hiện và bạn cần sử dụng đúng loại trên mỗi trình biên dịch implementp sao cho kích thước đủ lớn để lưu trữ tất cả các giá trị có thể.
Tiêu đề sẽ đi kèm với nền tảng SDK sẽ có typedef
sẽ ánh xạ size_t
vào loại số nguyên bên phải. Vì vậy, bạn viết memset()
một lần và nó biên dịch ngay trên mọi triển khai.
size_t là loại phù hợp để biểu diễn lượng bộ nhớ mà đối tượng dữ liệu yêu cầu. Nó là một loại số nguyên không dấu (thường, typedef unsigned int size_t;).
Đọc liên kết this để biết thêm thông tin.
size_t
được đảm bảo đủ lớn để giữ con trỏ trên tất cả các nền tảng.
Xem câu trả lời của Thẩm phán Maygarden. – user9876
Đẹp downmod, nhưng nếu bạn thực sự đọc và hiểu câu trả lời của Thẩm phán Maygarden, bạn sẽ thấy rằng chúng tôi đang nói chính xác điều tương tự. "Kích thước theo bit của size_t thay đổi dựa trên không gian địa chỉ của nền tảng đích" là đẳng cấu để "size_t được đảm bảo đủ lớn để giữ một con trỏ trên tất cả các nền tảng." Thẩm phán Maygarden cho rằng size_t có thể nhỏ hơn kích thước đăng ký trên một số nền tảng. Anh ta không nói nó có thể nhỏ hơn kích thước con trỏ, bởi vì nó không thể. – jemfinch
Vì vậy, sự khác biệt giữa kích thước đăng ký và kích thước con trỏ là gì? – Grissiom
- 1. Cú pháp của C++ mẫu với các thông số loại chức năng
- 2. Thông số chức năng - Python
- 3. loại các loại trong các chức năng
- 4. Tại sao đặt chức năng?
- 5. Thông số chức năng: Sao chép hoặc con trỏ?
- 6. Thông số chức năng số tối đa
- 7. Tại sao C++ lambda chậm hơn chức năng thông thường khi được gọi nhiều lần?
- 8. Thông số mẫu chức năng không kiểu
- 9. Tại sao các chức năng tĩnh loại bỏ các ký hiệu không xác định trong Xcode?
- 10. C++ Chức năng Template instantiaion với các thông số ngầm
- 11. Viết thông số chức năng cho các trò chơi
- 12. Thông số chức năng: IEnumerable, ICollection hoặc array?
- 13. Tại sao không thể nhập các thông số loại không thuộc loại lớp
- 14. Đối số chức năng nhiều loại
- 15. Cảnh báo cho các chức năng không có thông số kỹ thuật loại?
- 16. Tại sao chức năng Clojure chỉ bao gồm các cuộc gọi chức năng lười biếng?
- 17. loại tham số chức năng và =>
- 18. Tại sao gọi một số chức năng của lớp Object, trên một thể loại nguyên thủy, cần boxing?
- 19. Tại sao GCC giữ các chức năng trống?
- 20. Tại sao chức năng ảo bị ẩn?
- 21. thông số và chức năng quyền hạn
- 22. phát lại danh sách các chức năng và thông số
- 23. Tại sao chức năng CallBack của tôi không hoạt động?
- 24. Javascript: thông số "Infinite" cho chức năng?
- 25. Nhiều thông số tùy chọn chức năng
- 26. Nhận "các loại xung đột cho chức năng" trong C, tại sao?
- 27. Go - thông số chức năng variadic pass-through
- 28. Chức năng gọi thành viên của số
- 29. Tại sao einsum của numpy lại nhanh hơn các chức năng tích hợp của numpy?
- 30. thông số bắt buộc trong các chức năng Python và các giá trị mặc định của họ
Xem thêm: http://stackoverflow.com/questions/502856/whats-the-difference-between-sizet-and-int-in-c –