❶ 資料庫中數據類型有哪些呢
數據類型 類型 描 述 bit 整型 bit 數據類型是整型,其值只能是0、1或空值。這種數據類型用於存儲只有兩種可能值的數據,如Yes 或No、True 或Fa lse 、On 或Off int 整型 int 數據類型可以存儲從- 231(-2147483648)到231 (2147483 647)之間的整數。存儲到資料庫的幾乎所有數值型的數據都可以用這種數據類型。這種數據類型在資料庫里佔用4個位元組 smallint 整型 smallint 數據類型可以存儲從- 215(-32768)到215(32767)之間的整數。這種數據類型對存儲一些常限定在特定范圍內的數值型數據非常有用。這種數據類型在資料庫里佔用2 位元組空間 tinyint 整型 tinyint 數據類型能存儲從0到255 之間的整數。它在你只打算存儲有限數目的數值時很有用。 這種數據類型在資料庫中佔用1 個位元組 numeric精確數值型 numeric數據類型與decimal 型相同 decimal 精確數值型 decimal 數據類型能用來存儲從-1038-1到1038-1的固定精度和范圍的數值型數據。使用這種數據類型時,必須指定范圍和精度。 范圍是小數點左右所能存儲的數字的總位數。精度是小數點右邊存儲的數字的位數 money 貨幣型 money 數據類型用來表示錢和貨幣值。這種數據類型能存儲從-9220億到9220 億之間的數據,精確到貨幣單位的萬分之一 smallmoney 貨幣型 smallmoney 數據類型用來表示錢和貨幣值。這種數據類型能存儲從-214748.3648 到214748.3647 之間的數據,精確到貨幣單位的萬分之一 float 近似數值型 float 數據類型是一種近似數值類型,供浮點數使用。說浮點數是近似的,是因為在其范圍內不是所有的數都能精確表示。浮點數可以是從-1.79E+308到1.79E+308 之間的任意數 real 近似數值型 real 數據類型像浮點數一樣,是近似數值類型。它可以表示數值在-3.40E+38到3.40E+38之間的浮點數 datetime 日期時間型 datetime數據類型用來表示日期和時間。這種數據類型存儲從1753年1月1日到9999年12月3 1日間所有的日期和時間數據, 精確到三百分之一秒或3.33毫秒 Smalldatetime 日期時間型 smalldatetime 數據類型用來表示從1900年1月1日到2079年6月6日間的日期和時間,精確到一分鍾 cursor 特殊數據型 cursor 數據類型是一種特殊的數據類型,它包含一個對游標的引用。這種數據類型用在存儲過程中,而且創建表時不能用 timestamp 特殊數據型 timestamp 數據類型是一種特殊的數據類型,用來創建一個資料庫范圍內的唯一數碼。 一個表中只能有一個timestamp列。每次插入或修改一行時,timestamp列的值都會改變。盡管它的名字中有「time」, 但timestamp列不是人們可識別的日期。在一個資料庫里,timestamp值是唯一的 Uniqueidentifier 特殊數據型 Uniqueidentifier數據類型用來存儲一個全局唯一標識符,即GUID。GUID確實是全局唯一的。這個數幾乎沒有機會在另一個系統中被重建。可以使用NEWID 函數或轉換一個字元串為唯一標識符來初始化具有唯一標識符的列 char 字元型 char數據類型用來存儲指定長度的定長非統一編碼型的數據。當定義一列為此類型時,你必須指定列長。當你總能知道要存儲的數據的長度時,此數據類型很有用。例如,當你按郵政編碼加4個字元格式來存儲數據時,你知道總要用到10個字元。此數據類型的列寬最大為8000 個字元 varchar 字元型 varchar數據類型,同char類型一樣,用來存儲非統一編碼型字元數據。與char 型不一樣,此數據類型為變長。當定義一列為該數據類型時,你要指定該列的最大長度。 它與char數據類型最大的區別是,存儲的長度不是列長,而是數據的長度 text 字元型 text 數據類型用來存儲大量的非統一編碼型字元數據。這種數據類型最多可以有231-1或20億個字元 nchar 統一編碼字元型 nchar 數據類型用來存儲定長統一編碼字元型數據。統一編碼用雙位元組結構來存儲每個字元,而不是用單位元組(普通文本中的情況)。它允許大量的擴展字元。此數據類型能存儲4000種字元,使用的位元組空間上增加了一倍 nvarchar 統一編碼字元型 nvarchar 數據類型用作變長的統一編碼字元型數據。此數據類型能存儲4000種字元,使用的位元組空間增加了一倍 ntext 統一編碼字元型 ntext 數據類型用來存儲大量的統一編碼字元型數據。這種數據類型能存儲230 -1或將近10億個字元,且使用的位元組空間增加了一倍 binary 二進制數據類型 binary數據類型用來存儲可達8000 位元組長的定長的二進制數據。當輸入表的內容接近相同的長度時,你應該使用這種數據類型 varbinary 二進制數據類型 varbinary 數據類型用來存儲可達8000 位元組長的變長的二進制數據。當輸入表的內容大小可變時,你應該使用這種數據類型 image 二進制數據類型 image 數據類型用來存儲變長的二進制數據,最大可達231-1或大約20億位元組
❷ 數據存儲形式有哪幾種
【塊存儲】
典型設備:磁碟陣列,硬碟
塊存儲主要是將裸磁碟空間整個映射給主機使用的,就是說例如磁碟陣列裡面有5塊硬碟(為方便說明,假設每個硬碟1G),然後可以通過劃邏輯盤、做Raid、或者LVM(邏輯卷)等種種方式邏輯劃分出N個邏輯的硬碟。(假設劃分完的邏輯盤也是5個,每個也是1G,但是這5個1G的邏輯盤已經於原來的5個物理硬碟意義完全不同了。例如第一個邏輯硬碟A裡面,可能第一個200M是來自物理硬碟1,第二個200M是來自物理硬碟2,所以邏輯硬碟A是由多個物理硬碟邏輯虛構出來的硬碟。)
接著塊存儲會採用映射的方式將這幾個邏輯盤映射給主機,主機上面的操作系統會識別到有5塊硬碟,但是操作系統是區分不出到底是邏輯還是物理的,它一概就認為只是5塊裸的物理硬碟而已,跟直接拿一塊物理硬碟掛載到操作系統沒有區別的,至少操作系統感知上沒有區別。
此種方式下,操作系統還需要對掛載的裸硬碟進行分區、格式化後,才能使用,與平常主機內置硬碟的方式完全無異。
優點:
1、 這種方式的好處當然是因為通過了Raid與LVM等手段,對數據提供了保護。
2、 另外也可以將多塊廉價的硬碟組合起來,成為一個大容量的邏輯盤對外提供服務,提高了容量。
3、 寫入數據的時候,由於是多塊磁碟組合出來的邏輯盤,所以幾塊磁碟可以並行寫入的,提升了讀寫效率。
4、 很多時候塊存儲採用SAN架構組網,傳輸速率以及封裝協議的原因,使得傳輸速度與讀寫速率得到提升。
缺點:
1、採用SAN架構組網時,需要額外為主機購買光纖通道卡,還要買光纖交換機,造價成本高。
2、主機之間的數據無法共享,在伺服器不做集群的情況下,塊存儲裸盤映射給主機,再格式化使用後,對於主機來說相當於本地盤,那麼主機A的本地盤根本不能給主機B去使用,無法共享數據。
3、不利於不同操作系統主機間的數據共享:另外一個原因是因為操作系統使用不同的文件系統,格式化完之後,不同文件系統間的數據是共享不了的。例如一台裝了WIN7/XP,文件系統是FAT32/NTFS,而Linux是EXT4,EXT4是無法識別NTFS的文件系統的。就像一隻NTFS格式的U盤,插進Linux的筆記本,根本無法識別出來。所以不利於文件共享。
【文件存儲】
典型設備:FTP、NFS伺服器
為了克服上述文件無法共享的問題,所以有了文件存儲。
文件存儲也有軟硬一體化的設備,但是其實普通拿一台伺服器/筆記本,只要裝上合適的操作系統與軟體,就可以架設FTP與NFS服務了,架上該類服務之後的伺服器,就是文件存儲的一種了。
主機A可以直接對文件存儲進行文件的上傳下載,與塊存儲不同,主機A是不需要再對文件存儲進行格式化的,因為文件管理功能已經由文件存儲自己搞定了。
優點:
1、造價交低:隨便一台機器就可以了,另外普通乙太網就可以,根本不需要專用的SAN網路,所以造價低。
2、方便文件共享:例如主機A(WIN7,NTFS文件系統),主機B(Linux,EXT4文件系統),想互拷一部電影,本來不行。加了個主機C(NFS伺服器),然後可以先A拷到C,再C拷到B就OK了。(例子比較膚淺,請見諒……)
缺點:
讀寫速率低,傳輸速率慢:乙太網,上傳下載速度較慢,另外所有讀寫都要1台伺服器裡面的硬碟來承擔,相比起磁碟陣列動不動就幾十上百塊硬碟同時讀寫,速率慢了許多。
【對象存儲】
典型設備:內置大容量硬碟的分布式伺服器
對象存儲最常用的方案,就是多台伺服器內置大容量硬碟,再裝上對象存儲軟體,然後再額外搞幾台服務作為管理節點,安裝上對象存儲管理軟體。管理節點可以管理其他伺服器對外提供讀寫訪問功能。
之所以出現了對象存儲這種東西,是為了克服塊存儲與文件存儲各自的缺點,發揚它倆各自的優點。簡單來說塊存儲讀寫快,不利於共享,文件存儲讀寫慢,利於共享。能否弄一個讀寫快,利 於共享的出來呢。於是就有了對象存儲。
首先,一個文件包含了了屬性(術語叫metadata,元數據,例如該文件的大小、修改時間、存儲路徑等)以及內容(以下簡稱數據)。
以往像FAT32這種文件系統,是直接將一份文件的數據與metadata一起存儲的,存儲過程先將文件按照文件系統的最小塊大小來打散(如4M的文件,假設文件系統要求一個塊4K,那麼就將文件打散成為1000個小塊),再寫進硬碟裡面,過程中沒有區分數據/metadata的。而每個塊最後會告知你下一個要讀取的塊的地址,然後一直這樣順序地按圖索驥,最後完成整份文件的所有塊的讀取。
這種情況下讀寫速率很慢,因為就算你有100個機械手臂在讀寫,但是由於你只有讀取到第一個塊,才能知道下一個塊在哪裡,其實相當於只能有1個機械手臂在實際工作。
而對象存儲則將元數據獨立了出來,控制節點叫元數據伺服器(伺服器+對象存儲管理軟體),裡面主要負責存儲對象的屬性(主要是對象的數據被打散存放到了那幾台分布式伺服器中的信息),而其他負責存儲數據的分布式伺服器叫做OSD,主要負責存儲文件的數據部分。當用戶訪問對象,會先訪問元數據伺服器,元數據伺服器只負責反饋對象存儲在哪些OSD,假設反饋文件A存儲在B、C、D三台OSD,那麼用戶就會再次直接訪問3台OSD伺服器去讀取數據。
這時候由於是3台OSD同時對外傳輸數據,所以傳輸的速度就加快了。當OSD伺服器數量越多,這種讀寫速度的提升就越大,通過此種方式,實現了讀寫快的目的。
另一方面,對象存儲軟體是有專門的文件系統的,所以OSD對外又相當於文件伺服器,那麼就不存在文件共享方面的困難了,也解決了文件共享方面的問題。
所以對象存儲的出現,很好地結合了塊存儲與文件存儲的優點。
最後為什麼對象存儲兼具塊存儲與文件存儲的好處,還要使用塊存儲或文件存儲呢?
1、有一類應用是需要存儲直接裸盤映射的,例如資料庫。因為資料庫需要存儲裸盤映射給自己後,再根據自己的資料庫文件系統來對裸盤進行格式化的,所以是不能夠採用其他已經被格式化為某種文件系統的存儲的。此類應用更適合使用塊存儲。
2、對象存儲的成本比起普通的文件存儲還是較高,需要購買專門的對象存儲軟體以及大容量硬碟。如果對數據量要求不是海量,只是為了做文件共享的時候,直接用文件存儲的形式好了,性價比高。
❸ 資料庫中數據類型有哪些
Character 數據類型
Character 數據類型用來存儲字母數字型數據。當你在oracle 中定義一個character 數據時,通常需要制定欄位的長度,它是該欄位的最大長度。ORACLE提供以下幾種character 數據類型:
CHAR() CHAR數據類型是一種有固定長度和最大長度的字元串。存儲在數據類型為CHAR欄位中的數據將以空格的形式補到最大長度。長度定義在1——2000位元組之間。
當你創建一個CHAR型欄位,資料庫將保證在這個欄位中的所有數據是定義長度,如果某個數據比定義長度短,那麼將用空格在數據的右邊補到定義長度。如果長度大於定義長度將會觸發錯誤信息。
VARCHAR() varchar型數據是varchar2型數據的快照。
VARCHAR2() varchar2數據類型是一種可變長度的、有最大長度的字母數字型數據。Varchar2類型的欄位長度可以達到4000位元組,Varchar2類型的變數長度可以達到32676位元組。
一個空的varchar2(2000)欄位和一個空的varchar2(2)欄位所佔用的空間是一樣的。
NCHAR() 和 NVARCHAR2() NCHAR() 和 NVARCHAR2()數據類型分別與CHAR() 和 VARCHAR2()類型是相同的,只不過它們用來存儲NLS(National Language Support)數據。
LONG LONG 數據類型是一個遺留下來的而且在將來不會被支持的數據類型。它將被LOB(Large Object)數據類型所代替。
比較規則 Varchar2和char數據類型根據尾部的空格有不同的比較規則。對Char型數據,尾部的空格將被忽略掉,對於Varchar2型數據尾部帶空格的數據排序比沒有空格的要大些。比如:
Char 型數據: 『YO』=『YO 』
Varchar2型數據: 『YO』<』YO 』
Numberic 數據類型
Numberic 數據類型用來存儲負的和正的整數、分數和浮點型數據,范圍在-1*10-103 和9.999…99*10125之間,有38位的精確度。標識一個數據超出這個范圍時就會出錯。
Number(
,) Number數據類型存儲一個有p位精確度的s位等級的數據。
DATE 數據類型
DATE 數據類型用來存儲日期和時間格式的數據。這種格式可以轉換為其他格式的數據去瀏覽,而且它有專門的函數和屬性用來控制和計算。以下的幾種信息都包含在DATE數據類型中:
Century
Year
Month
Day
Hour
Minute
Second
LOB 數據類型
LOB(Large Object) 數據類型存儲非結構化數據,比如二進制文件,圖形文件,或其他外部文件。LOB 可以存儲到4G位元組大小。數據可以存儲到資料庫中也可以存儲到外部數據文件中。LOB數據的控制通過DBMS_LOB 包實現。BLOB, NCLOB, 和CLOB 數據可以存儲到不同的表空間中,BFILE存儲在伺服器上的外部文件中。LOB數據類型有以下幾種:
BLOB: 二進制數據
CLOB: 字元型數據
BFILE: 二進制文件
其他數據類型
ROWID ROWID 數據類型是ORACLE數據表中的一個偽列,它是數據表中每行數據內在的唯一的標識。
❹ 存儲的數據類型
計算機處理數據的單位叫word,我們一般說的32位64位計算機就是指word。為了提高處理效率,數據盡量不要或少跨word存儲。這就需要數據的存儲地址是數據長度的整數倍,和類型長度一樣,對齊的單位一般是2的冪。基本類型對齊單位是其類型長度,組合類型(數組、結構、聯合)的對齊單位是其成員的最大對齊單位。由於默認對齊的存在,組合類型的成員之間可能有一些空隙,sizeof的結果可能不是簡單的累加了。但要注意,組合類型的成員總是盡量向低地址靠齊,所以組合類型的開頭是不會有空隙的。
❺ 什麼是結構化的數據存儲類型
結構化數據存儲,就是把數據按照一定的結構存儲起來,比如ios的NSDictionary,一個健對應一個值。以便於操作數據的時候方便操作,
一般有3種
鍵值歸檔(一個鍵,對應一個值,按鍵取值)
屬性列表(諸如xml文件存儲之類的)
資料庫存儲(直接存儲資料庫)
❻ 計算機可存儲的常見的數據類型有那些舉例說明。
1. 字元串數據類型
char
此數據類型可存儲1~8000個定長字元串,字元串長度在創建時指定;如未指定,默認為char(1)。每個字元佔用1byte存儲空間。
nchar
此數據類型可存儲1~4000個定長Unicode字元串,字元串長度在創建時指定;如未指定,默認為nchar(1)。每個字元佔用2bytes存儲空間。
varchar
此數據類型可存儲最大值為8000個字元的可變長字元串。可變長字元串的最大長度在創建時指定,如varchar(50),每個字元佔用1byte存儲空間。
nvarchar
此數據類型可存儲最大值為4000個字元可變長Unicode字元串。可變長Unicode字元串的最大長度在創建時指定,如nvarchar(50),每個字元佔用2bytes存儲空間。
text
此數據類型可存儲最大值為2147483647個字元的變長文本,並且無需指定其初始值,每個字元佔用1byte存儲空間,一般用來存儲大段的文章。text數據類型實際上是一個Large Object數據類型,默認情況下,此類型的數據不是存儲在數據行內,而是存儲於獨立的Large Object數據頁上。另外,text數據類型不能做為函數、存儲過程或觸發器中的參數來用。
ntext
同text數據類型,只不過存儲的是最大值為1073741823個字元的Unicode變長文本,每個字元佔用1byte存儲空間。
說明:無論使用哪種字元串數據類型,字元串值必須放在引號內,推薦使用單引號。
2. 數值數據類型
bit
此數據類型存儲值為0或1的二進制欄位。佔用1byte存儲空間。
tinyint
此數據類型存儲0~255的整數,佔用1byte存儲空間。
smallint
此數據類型存儲-32768~32767的整數,佔用2bytes存儲空間。
int
此數據類型存儲-2147483648~2147483647的整數,佔用4bytes存儲空間。
bigint
此數據類型存儲-9223372036854775808~9223372036854775807的整數,佔用8bytes存儲空間。
decimal/numeric
這兩個數據類型功能相同,均為存儲精度可變的浮點值。但推薦採用decimal,因其存儲的數據「更有說明性」。此種數據類型由兩個值來確定decimal(p,s),p為精度,s為標量,如decimal(3,2),其中數值2為小數的位數,那麼decimal(3,2)可用來存儲如1.28這樣的浮點數。此種數據類型佔用的存儲空間取決於精度值p。p為1~9,佔用5bytes存儲空間;p為10~19,佔用9bytes存儲空間;p為20~28,佔用13bytes存儲空間;p為29~38,佔用17bytes存儲空間。
❼ sql資料庫中常用的數據類型有什麼
一、整數數據類型:整數數據類型是最常用的數據類型之一。
1、INT(INTEGER)
INT (或INTEGER)數據類型存儲從-2的31次方 (-2 ,147 ,483 ,648) 到2的31次方-1 (2 ,147 ,483,647) 之間的所有正負整數。每個INT 類型的數據按4 個位元組存儲,其中1 位表示整數值的正負號,其它31 位表示整數值的長度和大小。
2、SMALLINT
SMALLINT 數據類型存儲從-2的15次方( -32, 768) 到2的15次方-1( 32 ,767 )之間的所有正負整數。每個SMALLINT 類型的數據佔用2 個位元組的存儲空間,其中1 位表示整數值的正負號,其它15 位表示整數值的長度和大小。
二、浮點數據類型:浮點數據類型用於存儲十進制小數。浮點數值的數據在SQL Server 中採用上舍入(Round up 或稱為只入不舍)方式進行存儲。
1、REAL數據類型
REAL數據類型可精確到第7 位小數,其范圍為從-3.40E -38 到3.40E +38。 每個REAL類型的數據佔用4 個位元組的存儲空間。
2、FLOAT
FLOAT數據類型可精確到第15 位小數,其范圍為從-1.79E -308 到1.79E +308。 每個FLOAT 類型的數據佔用8 個位元組的存儲空間。 FLOAT數據類型可寫為FLOAT[ n ]的形式。n 指定FLOAT 數據的精度。n 為1到15 之間的整數值。
當n 取1 到7 時,實際上是定義了一個REAL 類型的數據,系統用4 個位元組存儲它;當n 取8 到15 時,系統認為其是FLOAT 類型,用8 個位元組存儲它。
三、二進制數據類型
1、BINARY
BINARY 數據類型用於存儲二進制數據。其定義形式為BINARY( n), n 表示數據的長度,取值為1 到8000 。在使用時必須指定BINARY 類型數據的大小,至少應為1 個位元組。BINARY 類型數據佔用n+4 個位元組的存儲空間。
在輸入數據時必須在數據前加上字元「0X」 作為二進制標識,如:要輸入「abc 」則應輸入「0xabc 」。若輸入的數據過長將會截掉其超出部分。若輸入的數據位數為奇數,則會在起始符號「0X 」後添加一個0,如上述的「0xabc 」會被系統自動變為「0x0abc」。
2、VARBINARY
VARBINARY數據類型的定義形式為VARBINARY(n)。 它與BINARY 類型相似,n 的取值也為1 到8000, 若輸入的數據過長,將會截掉其超出部分。
不同的是VARBINARY數據類型具有變動長度的特性,因為VARBINARY數據類型的存儲長度為實際數值長度+4個位元組。當BINARY數據類型允許NULL 值時,將被視為VARBINARY數據類型。
四、邏輯數據類型
1、BIT:BIT數據類型佔用1 個位元組的存儲空間,其值為0 或1 。如果輸入0 或1 以外的值,將被視為1。 BIT 類型不能定義為NULL 值(所謂NULL 值是指空值或無意義的值)。
五、字元數據類型:字元數據類型是使用最多的數據類型。它可以用來存儲各種字母、數字元號、特殊符號。一般情況下,使用字元類型數據時須在其前後加上單引號』或雙引號」 。
1、CHAR
CHAR 數據類型的定義形式為CHAR[ (n) ]。 以CHAR 類型存儲的每個字元和符號佔一個位元組的存儲空間。n 表示所有字元所佔的存儲空間,n 的取值為1 到8000, 即可容納8000 個ANSI 字元。
若不指定n 值,則系統默認值為1。 若輸入數據的字元數小於n,則系統自動在其後添加空格來填滿設定好的空間。若輸入的數據過長,將會截掉其超出部分。
SQL包括了所有對資料庫的操作,主要是由4個部分組成:
1、數據定義:這一部分又稱為「SQL DDL」,定義資料庫的邏輯結構,包括定義資料庫、基本表、視圖和索引4部分。
2、數據操縱:這一部分又稱為「SQL DML」,其中包括數據查詢和數據更新兩大類操作,其中數據更新又包括插入、刪除和更新三種操作。
3、數據控制:對用戶訪問數據的控制有基本表和視圖的授權、完整性規則的描述,事務控制語句等。
4、嵌入式SQL語言的使用規定:規定SQL語句在宿主語言的程序中使用的規則。
❽ 什麼是變數的存儲類型
C語言的變數有4種存儲類型,分別是auto(自動型)、static(靜態型)、register(寄存器型)和extern(外部型)。在定義或說明一個變數時可以加上存儲類型關鍵字,以限定其存儲類別。
存儲類型決定了系統將在哪一個數據存儲區為變數分配存儲空間。auto型將在堆棧區分配存儲空間;static型將在靜態數據區分配存儲空間;register型將在CPU內部的寄存器中分配存儲空間;而extern將不為變數分配存儲空間,extern聲明該變數在別的地方已經分配了存儲空間。
變數存儲類型關鍵字只需加在變數定義語句類型關鍵字前面即可。
char ch1;/*定義了一個char型變數ch1,其存儲類型默認為自動型(必須是內部變數)*/
static char ch2;/*定義了一個char型變數ch2,其存儲類型指定為靜態型*/
注意:以上auto型是對內部變數而言,對於外部變數不存在自動型的問題。內部變數自動在堆棧區分配空間。事實上,內部變數默認為自動型,所以auto限定詞沒有任何用處。
1.自動型變數
定義一個內部變數時,如果將auto加在定義語句前面,則該變數是自動型變數;定義內部變數時,如果沒有加任何存儲類型限定,該變數默認為自動型變數。
auto只能修飾內部變數,不能修飾外部變數。也就是說只有內部變數可以定義為自動型變數,外部變數不能定義為自動型變數。
事實上,auto沒有什麼實際用處。內部變數已經默認為自動型變數。
2.靜態型變數
外部變數和內部變數都可以定義為靜態型變數。
如果在定義一個內部變數時,在定義語句最前面加上static存儲類型限定詞,那麼該變數將是一個靜態型變數。該變數將在靜態數據區分配存儲空間。這種變數作用域雖然只在函數內部,但是該變數將一直在靜態數據區占據存儲空間,直到程序運行結束。
定義外部變數時,如果不加存儲類型限定詞,它將在靜態數據區分配存儲空間。它的作用域除了本文件以外,其他文件通過extern語句聲明後也可訪問。
但是,如果在定義一個外部變數時,加上static限定詞,其作用域將變窄,該變數只在本文件中可見,在其他文件中將不可見,此時在其他文件中即使用extern聲明也不能擴展其作用域。這是一個外部靜態型變數,也在靜態數據區分配存儲空間。
注意:對於函數的作用域也是這樣,如果在函數定義時加上了static限定詞,那麼該函數也只在其定義文件內可見(「可見」的意思就是在在該范圍內可以使用)。在其他文件中即使聲明了也不可以調用。另外,對於函數聲明而言可以省略extern關鍵字。
一個文件中加了static的同名外部變數將隱藏其他文件中定義的未加static的外部變數。也就是說,static變數能夠屏蔽其他文件中的同名外部變數,這功能有點像函數的內部變數能夠屏蔽同名的外部變數一樣。但是,不同文件中如具有未加static的多個同名外部變數則是非法的。
static限定詞常用於外部變數,也可用於函數。正常情況下,函數名字是全局的,對程序的任何部分都是可見的。如果在定義一個函數時用static限定,該函數將在其定義文件以外不可見。
static限定詞同樣能夠應用於內部變數。此時,該變數將是一個內部靜態型變數。內部靜態型變數就像自動變數一樣是屬於某個特定函數的內部變數。但是,同自動型變數不同,它們一直在內存中存在,而不是隨著函數的每次調用而存在,隨著函數調用結束而消失。這意味著內部靜態型變數提供了單個函數內部私有的、持久的存儲。也就是說內部靜態型變數只在函數被調用時起作用,但是它將在程序的整個運行時間內一直占據內存空間。
3.寄存器型變數
register限定詞通知編譯器--程序中的變數將頻繁使用。它的意思是建議編譯器將程序中用register限定的變數放置在計算機的內部寄存其中,這樣可能得到更小更快的程序。但是,編譯器將根據實際情況考慮是否採納該建議--是否將register變數處理為寄存器變數最終決定權還是在編譯器。
如下使用register:
register int x;/*x必須是內部變數*/
register char ch;/*ch必須是內部變數*/
register只能用於限定自動型變數和函數的形式參數。也就是說register只對內部變數起作用,而且只能限定內部非靜態型變數,不能限定內部靜態型變數。
register也可以應用於形式參數,格式如下:
f(register unsigned m,register long n) /*register應用於形式參數*/
{
register int i; /* register應用於內部變數*/
}
在傳統C中,register變數的使用有諸多限制,它決定於硬體的實現方式。在每一個函數中只有少數幾個變數可以保存在寄存器中,而且也只有特定的類型才行。過量的register變數看起來是無害的,但是超量以後,編譯器將忽略新的register變數。另外不管register變數實際上是否被編譯器設置為寄存器型變數,都不可能取得該變數的地址。寄存器型變數的類型和數量的多少隨計算機不同而異。register變數一般只能夠設置幾個。傳統C的register類型限定於char、int等類型。像float、double、數組等是不可以設定為register型變數的。但是,在最新C99標准中,任何類型都可以定義為register變數,register聲明的目的只是告訴編譯器以盡快的速度處理該變數,編譯器不見得非把它處理為register變數。
4.外部型變數
如extern用於變數定義語句前面,那麼該語句就只能是一個聲明語句了,他不再是一個變數定義語句。它僅僅是一個聲明--聲明該變數已經在別的地方定義,只是告訴編譯器該變數的類型。
extern int sp;/* sp在別的地方定義,並分配存儲單元,本語句只是聲明它已經定義過*/
該語句聲明了sp在別的地方已經定義,並分配了存儲空間,本語句只是說明sp已經定義過的類型為int,並不再為它分配內存空間。這樣聲明以後,在本文件餘下部分就可以使用sp了。
❾ 存儲器的類型
根據存儲材料的性能及使用方法的不同,存儲器有幾種不同的分類方法。1、按存儲介質分類:半導體存儲器:用半導體器件組成的存儲器。磁表面存儲器:用磁性材料做成的存儲器。
下面我們就來了解一下存儲器的相關知識。
存儲器大體分為兩大類,一類是掉電後存儲信息就會丟失,另一類是掉電後存儲信息依然保留,前者專業術語稱之為「易失性存儲器」,後者稱之為「非易失性存儲器」。
1 RAM
易失性存儲器的代表就是RAM(隨機存儲器),RAM又分SRAM(靜態隨機存儲器)和DRAM(動態隨機存儲器)。
SRAM
SRAM保存數據是靠晶體管鎖存的,SRAM的工藝復雜,生產成本高,但SRAM速度較快,所以一般被用作Cashe,作為CPU和內存之間通信的橋梁,例如處理器中的一級緩存L1 Cashe, 二級緩存L2 Cashe,由於工藝特點,SRAM的集成度不是很高,所以一般都做不大,所以緩存一般也都比較小。
DRAM
DRAM(動態隨機存儲器)保存數據靠電容充電來維持,DRAM的應用比SRAM更普遍,電腦裡面用的內存條就是DRAM,隨著技術的發展DRAM又發展為SDRAM(同步動態隨機存儲器)DDR SDRAM(雙倍速率同步動態隨機存儲器),SDRAM只在時鍾的上升沿表示一個數據,而DDR SDRAM能在上升沿和下降沿都表示一個數據。
DDR又發展為DDR2,DDR3,DDR4,在此基礎上為了適應移動設備低功耗的要求,又發展出LPDDR(Low Power Double Data Rate SDRAM),對應DDR技術的發展分別又有了LPDDR2, LPDDR3, LPDDR4。
目前手機中運行內存應用最多的就是 LPDDR3和LPDDR4,主流配置為3G或4G容量,如果達到6G或以上,就屬於高端產品。
2 ROM
ROM(Read Only Memory)在以前就指的是只讀存儲器,這種存儲器只能讀取它裡面的數據無法向裡面寫數據。所以這種存儲器就是廠家造好了寫入數據,後面不能再次修改,常見的應用就是電腦里的BIOS。
後來,隨著技術的發展,ROM也可以寫數據,但是名字保留了下來。
ROM中比較常見的是EPROM和EEPROM。
EPROM
EPROM(Easerable Programable ROM)是一種具有可擦除功能,擦除後即可進行再編程的ROM內存,寫入前必須先把裡面的內容用紫外線照射IC上的透明視窗的方式來清除掉。這一類晶元比較容易識別,其封裝中包含有「石英玻璃窗」,一個編程後的EPROM晶元的「玻璃窗」一般使用黑色不幹膠紙蓋住, 以防止遭到紫外線照射。
EPROM (Easerable Programable ROM)
EPROM存儲器就可以多次擦除然後多次寫入了。但是要在特定環境紫外線下擦除,所以這種存儲器也不方便寫入。
EEPROM
EEPROM(Eelectrically Easerable Programable ROM),電可擦除ROM,現在使用的比較多,因為只要有電就可擦除數據,再重新寫入數據,在使用的時候可頻繁地反復編程。
FLASH
FLASH ROM也是一種可以反復寫入和讀取的存儲器,也叫快閃記憶體,FLASH是EEPROM的變種,與EEPROM不同的是,EEPROM能在位元組水平上進行刪除和重寫而不是整個晶元擦寫,而FLASH的大部分晶元需要塊擦除。和EEPROM相比,FLASH的存儲容量更大。
FLASH目前應用非常廣泛,U盤、CF卡、SM卡、SD/MMC卡、記憶棒、XD卡、MS卡、TF卡等等都屬於FLASH,SSD固態硬碟也屬於FLASH。
NOR FLAHS & NAND FLASH
Flash又分為Nor Flash和Nand Flash。
Intel於1988年首先開發出Nor Flash 技術,徹底改變了原先由EPROM和EEPROM一統天下的局面;隨後,1989年,東芝公司發表了Nand Flash 結構,強調降低每比特的成本,有更高的性能,並且像磁碟一樣可以通過介面輕松升級。
Nor Flash與Nand Flash不同,Nor Flash更像內存,有獨立的地址線和數據線,但價格比較貴,容量比較小;而Nand Flash更像硬碟,地址線和數據線是共用的I/O線,類似硬碟的所有信息都通過一條硬碟線傳送一樣,而且Nand Flash與Nor Flash相比,成本要低一些,而容量大得多。
如果快閃記憶體只是用來存儲少量的代碼,這時Nor Flash更適合一些。而Nand Flash則是大量數據存儲的理想解決方案。
因此,Nor Flash型快閃記憶體比較適合頻繁隨機讀寫的場合,通常用於存儲程序代碼並直接在快閃記憶體內運行,Nand Flash型快閃記憶體主要用來存儲資料,我們常用的快閃記憶體產品,如U盤、存儲卡都是用Nand Flash型快閃記憶體。
在Nor Flash上運行代碼不需要任何的軟體支持,在Nand Flash上進行同樣操作時,通常需要驅動程序。
目前手機中的機身內存容量都比較大,主流配置已經有32G~128G存儲空間,用的通常就是Nand Flash,另外手機的外置擴展存儲卡也是Nand Flash。
❿ 什麼是結構化的數據存儲類型
在C語言中, 有 數據類型(data type) 和 數據存儲類(data storage class) 2個術語
數據類型一般用於表示 某個變數它在內存中占據的位元組數。
舉例, char ch = 『a』; 定義了一個字元變數ch, 初始化為字元a,數據類型為char的變數在內存中一般占據 一個位元組的內存空間,直接和它對應的一個函數為 sizeof(), 這個函數可以求出具體某個平台上,某種數據類型占據的內存位元組數。再舉例int數據類型, int這個數據類型的大小,一般而言與處理器中寄存器的大小是一致的, 對於不同的平台,16位,32位,64位 都是可能的,也就是2個位元組,4個位元組,8個位元組等
以上說的是數據類型
關於存儲類(storage class) 有4種,分別是 auto, static, extern, register
auto 是默認的存儲類型,也就是說你聲明一個變數,如 int i; 等同於 auto int i; 對於一個程序員而言,auto沒多大用途,對於一個編譯器設計者,就是另外一回事了。
static 聲明了靜態數據,所謂靜態數據 也就是變數的生命期(lifetime),通俗點講,就是它能起多久的作用(如果我沒說錯的話), 這種存儲類型的變數 是和 你的程序共存亡的,
如定義 static int count = 10; 除非你改變了它,或者程序退出了,否則它是一直存在的
extern 這個存儲類型, 一般是聲明變數,或者函數的,它告訴編譯器,某某的定義在別處,
比如
// in source code a.c
extern int p(unsigned i);
在這個程序的別的源代碼文件中存在 這個函數p的定義,
如
// in source code b.c
int p(unsigned i)
{
if(i>0)
return 1;
else
return 0;
}
regiter 這個存儲類告訴編譯器 盡量把某變數安排在寄存器里邊,這是程序員處於對該變數訪問速度的考慮,現在能看見這樣的聲明的機會不是很多了, 也有, 因為如果聲明了register 就打亂了編譯器本身的優化策略,但是,再說一次,有人還是在做這樣的使用的
希望我以上說的能對你有所幫助,哪怕一點點幫助也好