日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++工作笔记-32位和64位程序的区别

發布時間:2023/12/14 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++工作笔记-32位和64位程序的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:

https://blog.csdn.net/nma_123456/article/details/45077345

文章結尾有對此博文的修正和補充!

?

?

由于操作系統內存分配的不同,導致軟件開發過程中,需要編譯不同版本的軟件,此處以VS為例。

1、編譯程序根據需要選擇不同的編譯環境:

X86和win32位32位程序,X64為64位程序,可以選擇不同的編輯條件形成不同位的軟件。

2、代碼中的基本的數據類型,會根據操作系統的位數分配內存大小:
如int型在32位操作系統為4字節,在64位系統為8字節

因此在64位上對int型數據操作,編譯生成32的程序,有可能導致int型越界,軟件出現問題

3、32位的程序在64位操作系統上運行,由于64位操作系統的尋址和偏移的問題,也有可能導致程序在運行過程中,計算結果與32位系統不一致

4、64位操作系統理論上能夠兼容32位和64位軟件,32位操作系統不能運行64程序

5、使用VS2010或VS2012開發的程序,強制編譯為32位軟件,在xp系統下運行有問題,有可能與.net framework版本有關系,低版本的framework不能支持高版本framework的一些控件或類庫。嘗試安裝高版本的framework解決問題

借用一下博客內容:

一)64位系統和32位有什么區別??

1、64bit CPU擁有更大的尋址能力,最大支持到16GB內存,而32bit只支持4G內存

2、64位CPU一次可提取64位數據,比32位提高了一倍,理論上性能會提升1倍。但這是建立在64bit操作系統,64bit軟件的基礎上的。

?

什么是64位處理器?

之所以叫做“64位處理器”,是因為電腦內部都是實行2進制運算,處理器(CPU)一次處理數據的能力也是2的倍數。8位處理器、16位處理器、32位處理器和64位處理器,其計數都是2的倍數。一次處理的數據越大,該電腦處理信息的能力越來越大;因此64位處理在先天就比32位處理器具有快速的能力。那為什么不用更高級的128位處理器呢?因為位數越高,處理器芯片的設計也就越復雜,目前的技術水平暫時無法制造這么復雜的芯片。

?

64位處理器之失

※硬件———缺乏驅動程序,很多現有硬件無法使用

※軟件———操作系統不是問題,但是軟件出現不兼容難題

?

64位處理器之得

※硬件———更快的執行速度,更大的內存管理

※軟件———最新的尖端軟件首先出現在64位平臺

?

(二)數據類型對應字節數

程序運行平臺
??????不同的平臺上對不同數據類型分配的字節數是不同的。
??????個人對平臺的理解是CPU+OS+Compiler,是因為:?
??????1、64位機器也可以裝32位系統(x64裝XP);?
??????2、32位機器上可以有16/32位的編譯器(XP上有tc是16位的,其他常見的是32位的);?
??????3、即使是32位的編譯器也可以弄出64位的integer來(int64)。?
??????以上這些是基于常見的wintel平臺,加上我們可能很少機會接觸的其它平臺(其它的CPU和OS),所以個人認為所謂平臺的概念是三者的組合。?
??????雖然三者的長度可以不一樣,但顯然相互配合(即長度相等,32位的CPU+32位的OS+32位的Compiler)發揮的能量最大。?
??????理論上來講 我覺得數據類型的字節數應該是由CPU決定的,但是實際上主要由編譯器決定(占多少位由編譯器在編譯期間說了算)。

常用數據類型對應字節數
??可用如sizeof(char),sizeof(char*)等得出

?32位編譯器:

??????char :1個字節
??????char*(即指針變量): 4個字節(32位的尋址空間是2^32, 即32個bit,也就是4個字節。同理64位編譯器)
??????short int : 2個字節
??????int:??4個字節
??????unsigned int : 4個字節
??????float:??4個字節
??????double:???8個字節
??????long:???4個字節
??????long long:??8個字節
??????unsigned long:??4個字節

??64位編譯器:

??????char :1個字節
??????char*(即指針變量): 8個字節
??????short int : 2個字節
??????int:??4個字節
??????unsigned int : 4個字節
??????float:??4個字節
??????double:???8個字節
??????long:???8個字節
??????long long:??8個字節
??????unsigned long:??8個字節

?

?

【博主個人補充】

在VS中,不管是32位系統還是64位系統,int型都是4字節,只有指針類型不同(因為地址位數不同,造成尋址不同,造成指針大小不同)

如下運行截圖:

32位的系統截圖:

64位的系統截圖:

程序源碼如下:

#include <stdio.h>void main() {printf("The int size is %d\n", sizeof(int));printf("The pointer size is %d\n", sizeof(void *));getchar(); }

?

這里來看下反匯編,從反匯編可以看到,64位程序支持更大的尋址。

32位程序的截圖:

64位程序的截圖:

總結

以上是生活随笔為你收集整理的C++工作笔记-32位和64位程序的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。