Tôi đang đưa ra giả định (có thể sai) rằng nó được thực hiện và/hoặc phụ thuộc vào hệ thống. Có cái gì đó như INT_MAX hoặc CHAR_BIT mà sẽ cho tôi biết kích thước của một con trỏ trong bộ nhớ?Con trỏ C++ sử dụng bao nhiêu bộ nhớ?
Trả lời
Con trỏ trỏ vào một vị trí trong bộ nhớ, vì vậy nó sẽ là 32 bit trên hệ thống 32 bit và 64 bit trong hệ thống 64 bit.
kích thước con trỏ cũng là không thích hợp để loại nó trỏ tại, và có thể được đo bằng sizeof(anyType*)
UPD
Con đường tôi đã trả lời này đã được đề xuất bởi cách câu hỏi được hỏi (đề xuất một câu trả lời đơn giản). Có, tôi đồng ý rằng trong các trường hợp như con trỏ tới bảng phương thức ảo, kích thước của con trỏ sẽ khác nhau và theo this article, nó sẽ khác nhau trên các nền tảng khác nhau và thậm chí trên các trình biên dịch khác nhau trong cùng một nền tảng. Trong trường hợp của tôi, ví dụ (x64 ubuntu, GCC 4.6.3) nó bằng 16 byte.
Tất nhiên - cách đơn giản, nhưng đúng vậy. –
Sai. Trên hệ điều hành 64 bit, bạn vẫn có thể có chương trình được biên dịch ở chế độ 32 bit. –
Tôi cout'ed 'sizeof (int *)' và câu trả lời là '4'. Điều đó có nghĩa là 4 byte? (hơi thú vị vì đây là một máy 64-bit). Tôi đang biên dịch với Visual C++. – HorseloverFat
Liệu sizeof(int*)
có hoạt động không? Hoặc bất cứ điều gì bạn muốn kiểm tra?
Kích thước của con trỏ phụ thuộc vào hệ điều hành của bạn (thực sự là số bit của hệ điều hành), hãy thử chức năng sizeof (type *).
Sai. Trên hệ điều hành 64 bit, bạn vẫn có thể có chương trình được biên dịch ở chế độ 32 bit. –
@ icando..so kích thước của con trỏ có phụ thuộc vào chế độ bạn đang biên dịch không ?? Ví dụ: – Tejendra
@Tejendra - ví dụ: Visual Studio có 2 chế độ - Win32 - cho 32 bit và một cho x64 (quên tên) –
Đó chắc chắn là hệ thống phụ thuộc. Thông thường, một con trỏ dữ liệu đơn giản có thể được lưu trữ trong một biến size_t. Trong C++ 11 có macro SIZE_MAX là giá trị tối đa cho size_t. Trong C++ 11, bạn cũng có thể sử dụng std::intptr_t.
Nếu bạn đang dùng các con trỏ hàm thành viên, hãy xem xét mọi thứ trở nên phức tạp hơn. Nó phụ thuộc vào những thứ khác nếu lớp thừa kế từ một hoặc nhiều cha mẹ, nếu nó cho thấy các chức năng ảo, và tất nhiên về việc thực hiện.
Here bạn có thể tìm thấy bài viết chi tiết về các con trỏ hàm thành viên, cùng với một số ví dụ về vài trình biên dịch.
Câu trả lời cho một trường hợp đơn giản như int*
là đơn giản và được đưa ra trên các câu trả lời khác. Tuy nhiên, hãy nhớ rằng các thành viên của các đối tượng sử dụng nhiều thừa kế có thể chứa nhiều (WORD/DWORDs/QWORD), trong trường hợp xấu nhất lên đến 5 (năm).
Tốt bài viết về vấn đề này: http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible
Chính xác đa thừa kế có thể ảnh hưởng đến kích thước của con trỏ như thế nào? – EJP
Không. Như được viết, câu trả lời đơn giản là sai. Tôi nghi ngờ rằng các poster đã được suy nghĩ của con trỏ đến các thành viên, mà có thể có một kích thước khác biệt rõ ràng hơn so với con trỏ khác. (Tất nhiên, không có yêu cầu tất cả các con trỏ có cùng kích thước, ngay cả trong C, và tôi đã làm việc trên các máy có 'sizeof (int *)! = Sizeof (char *)', hoặc nơi con trỏ tới các hàm có một kích thước hơn con trỏ vào dữ liệu.) –
Tôi hiện không thể viết một thông báo chi tiết hơn. Trong một vài giờ, tôi sẽ cập nhật bài đăng của mình. –
#include<stdio.h>
#include<conio.h>
void main()
{
printf(" %d",sizeof(int *));
printf(" %d",sizeof(char *));
printf(" %d",sizeof(float *));
printf(" %d",sizeof(double *));
getch();
}
đã sử dụng chương trình này và hiển thị "2" của nó làm đầu ra cho tất cả các lệnh printf. Vì vậy, nếu tôi không sai, thì con trỏ sẽ mất 2 byte .... –
... chỉ trên máy tính cụ thể và có lẽ là khá cũ mà bạn đã sử dụng. Không có quy tắc về kích thước, mặc dù trên hầu hết các máy tính hiện đại, nó chắc chắn sẽ khác với 2. –
- 1. Bao nhiêu bộ nhớ vm có thể sử dụng
- 2. Có cách nào để xem bộ nhớ sử dụng bao nhiêu bộ nhớ?
- 3. zlib, deflate: Bộ nhớ phân bổ bao nhiêu bộ nhớ?
- 4. Bao nhiêu con trỏ không ảnh hưởng đến hiệu quả?
- 5. Cấp phát bộ nhớ C++ cho một mảng con trỏ
- 6. Có bao nhiêu bộ nhớ được sử dụng bởi một bộ lọc mờ nhạt?
- 7. Con trỏ và cấp phát bộ nhớ trong C
- 8. Làm thế nào để miễn phí() biết bao nhiêu bộ nhớ để deallocate?
- 9. Làm thế nào để bạn nhận được bao nhiêu bộ nhớ một chương trình sử dụng?
- 10. Ứng dụng iPhone có thể sử dụng bao nhiêu bộ nhớ?
- 11. iOS có bao nhiêu bộ nhớ cho phép ứng dụng sử dụng?
- 12. Có bao nhiêu hướng dẫn để truy cập con trỏ trong C?
- 13. phân bổ bộ nhớ cho con trỏ
- 14. bộ nhớ php bao nhiêu là quá nhiều
- 15. Chuỗi java của tôi mất bao nhiêu bộ nhớ?
- 16. C++ Hiệu suất con trỏ thông minh
- 17. Mô-đun hạt nhân của tôi sử dụng bao nhiêu bộ nhớ?
- 18. Bạn có thể phân bổ bộ nhớ bao nhiêu bộ nhớ?
- 19. Mục tiêu-C sử dụng con trỏ
- 20. Máy thu phát sóng giá bao nhiêu cho bộ nhớ?
- 21. Bộ nhớ thường nhanh hơn bao nhiêu so với đĩa?
- 22. Sử dụng bộ nhớ C#
- 23. C#: Sử dụng chung để tạo mảng con trỏ
- 24. Trong C, là các con trỏ mảng hay được sử dụng như con trỏ?
- 25. Danh sách với các đối tượng lặp lại - Chi phí bộ nhớ là bao nhiêu?
- 26. iOS 5 + ARC - không gán con trỏ cho con trỏ để giải phóng bộ nhớ?
- 27. OpenCV để sử dụng trong bộ nhớ đệm hoặc tệp con trỏ
- 28. sử dụng con trỏ phía máy chủ postgres để lưu vào bộ nhớ đệm
- 29. Mô phỏng bộ nhớ thấp bằng cách sử dụng C++
- 30. Phân bổ bộ nhớ động cho mảng con trỏ
Bạn nên cẩn thận với con trỏ hàm thành viên, vì chúng có thể có kích thước khác nhau, không giống như những người bình thường. Xem http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible để biết thêm chi tiết về đẫm máu. –