2012-02-09 29 views
11

Tôi nghĩ rằng tôi sẽ nhận được 8 khi tôi sử dụng IntPtr.Size. Tuy nhiên tôi vẫn nhận được 4 trên máy x64 với Widnows 7 x64, tại sao?Tại sao IntPtr.size là 4 trên Windows x64?

+4

Bạn đang biên dịch ứng dụng của mình thành x86 (Properties> Build> Platform Target) thay vì x64? – Rob

+0

Xem tại đây: http://stackoverflow.com/questions/399003/is-the-sizeofsome-pointer-always-equal-to-four – htmldrum

Trả lời

17

kiểm tra kiến ​​trúc CPU của tệp của bạn, có phải là x86 không? Nó phải là CPU bất kỳ/64bit

11

Hệ điều hành 64 bit thực hiện môi trường mô phỏng được gọi là WOW64 mô phỏng môi trường Windows 32 bit. Bạn đang xây dựng chương trình nhắm mục tiêu x86 của bạn, tức là 32 bit. Điều đó có nghĩa là quá trình của bạn chạy dưới trình giả lập như là một quá trình 32 bit và tất nhiên các con trỏ rộng 4 byte.

Nếu bạn thay đổi các tùy chọn để nhắm mục tiêu x64 hoặc AnyCPU thì kích thước con trỏ sẽ là 8 byte khi quá trình của bạn chạy trên hệ thống 64 bit.

0

Kiểm tra mục tiêu xây dựng của bạn: x86/x64 hoặc bất kỳ cpu nào Nếu cấu hình của bạn là x86 hoặc bất kỳ cpu nào, thì intptr là 4 có thể.

More gợi ý:

Nếu bạn không có nhu cầu để chạy chương trình của bạn trong chế độ x64, xin vui lòng donn't thay đổi mục tiêu xây dựng để x64 bởi vì chế độ x64 có tác động tiêu cực trên cả hiệu suất và không gian sử dụng. Tôi quên liên kết của bài viết gốc trên MSDN, nhưng lý do chính là sự gia tăng kích thước ptr và GC gánh nặng, bạn có thể tìm kiếm bài viết đó.

7

Ngoài các câu trả lời ở trên, ngay cả khi bạn đã chọn Kiến trúc CPU bất kỳ, VS2013 có tùy chọn mới trong thuộc tính dự án có tên "Ưu tiên 32 bit". Bạn phải tắt nó trên các máy phát triển 64 bit để có được IntPtr.Size = 8.

Các vấn đề liên quan