c語言分配超大的記憶體地址,c語言 分配一個超大的記憶體地址

2022-10-17 02:57:30 字數 4557 閱讀 9720

1樓:帽子狗

可能是我沒太看懂樓主的意思啊

個人還是覺得樓主可能是沒搞懂malloc的用法malloc可以申請到記憶體中可以申請的最大大小 一個int不算啥樓主是想做什麼呢?

如果要給其他型別的引數分配空間就要

type *a=(type *)malloc(sizeof(type));

比如double

double *a=(double *)malloc(sizeof(double));

自己定義的型別當然也行

而如果是要分配多個int空間 比如m個

這麼行就行了 malloc(m*sizeof(int));

2樓:

malloc 的引數是一個 unsigned 代表位元組大小。

輸入多少會分配給你多少位元組大小的空間,不是說引數int分配int空間。

分配int大小你是用的 sizeof(int) 吧?

你直接寫 (int *)malloc(4) 也可以,代表分配四個位元組的大小。當然int不一定就是4個位元組 所以還是 sizeof(int) 比較好。

想要更多空間 就寫 malloc(sizeof(int)+4) 什麼的。

3樓:匿名使用者

int*a=(iny*)malloc(10*sizeof(int));

4樓:創作者

我也在尋找一個能一次性分配超過 4g 大小記憶體的函式, 偶然看到這個提問.看了回答.感覺樓主會被氣死啊.哈哈哈哈哈...

c語言中對一個定義一個變數就是為其在記憶體中分配一個空間,那個空間最開始從哪分配起呢?

5樓:匿名使用者

分配記憶體,是指在記憶體中找個地方給這個變數,在邏輯空間上同一型別的變數是在一起的。

但是,我們現在的系統都是分頁分段管理的,所以會出現了邏輯地址和實體地址兩個概念。

邏輯地址,對於每個程式都是一樣的,變數在一起、常量又在另外的地方,還有**段、資料段等。

實體地址,就是實實在在的記憶體(也可能是硬碟)了,程式的資料究竟放在那塊記憶體由作業系統決定。

6樓:超人小笨蛋

c語言中的記憶體分配從地地址到高地址依次分為程式地址區域、文字常量地址區域、全域性變數地址區域、空閒區域(堆)地址區域、棧地址區域、作業系統地址區域。細說那就說來話長了,你可以找找講c的書,裡面一般會講儲存管理。

簡而言之,

一:像全域性變數、靜態變數這些能在編譯時就能確定其記憶體空間的變數,就採用靜態儲存分配分配到全域性變數地址區域;

二:棧式儲存分配,編譯器在編譯時僅知道程式變數所需空間,到執行時才為其分配地址的,就分配到棧地址區域;

三:堆式儲存分配,堆由大片可利用塊或空閒塊組成,堆中的記憶體可以按任意順序分配和釋放。在程式編譯無法確定資料塊大小時(如可變長度的字串),可在堆中分配記憶體空間;c語言在執行時進行的動態記憶體分配都是在堆中進行的

c語言 一個地址中 能存放最大的值是多少 如果要存放974943297 應該怎麼存 求指教 謝謝 100

7樓:風若遠去何人留

c語言的儲存是看型別的

現在的int都是4位元組的 可以存-2147483648 到 2147483647

這個就已經超出你說的 974943297

所以 int a= 974943297 ;

這樣就可以了

8樓:天選之徒啊

int 數值範圍-2^31~2^31-1

c語言的記憶體地址是按什麼順序排列的:比如是按從大到小還是記憶體自動分配的,請舉例

9樓:匿名使用者

您問的具體是什麼?

(1)是地址編號和積體電路里面(用顯微鏡看)各個單元的位置次序之間的關係?

(2)還是問程式中各個指令**執行的次序和地址編號之間的關係?

(3)還是問程式中各個變數的次序和地址編號之間的關係?

如果是(1),那麼

積體電路里面各個單元的位置次序,一般是不公開的。所以人們不知道它的次序是從左到右還是從右到左還是別的方式。據說,現在的佈局大多是交叉分散排列的,因為程式中經常出現連續訪問連續地址的操作,如此分散排列,可以使功耗分散,減小區域性溫升,延長器件壽命。

如果是(2),那麼

一般的指令,除了跳轉指令和呼叫、返回指令以外,普通指令都是按照地址連續增加的次序,連續排列的。而且,組合語言中書寫程式清單的次序,除了使用特殊偽指令規定地址(如org指令)處以外,都是按照地址編號連續增加的次序書寫的。如此,除跳轉、呼叫、返回指令外,書寫的次序就是執行的次序。

如果是(3),那麼

用組合語言設計程式時,你可以隨自己習慣,覺得怎麼安排方便,就怎麼安排。

如果是高階語言,那麼,不同的編譯程式,可以有所不同。

不過,如果是c語言,那麼陣列內部各個下標變數的地址,必須是按照下標由小到大地址也由小到大的次序連續安排。這是因為,c語言中,對指標的運算有嚴格規定。

例如p是指向整數的指標,則p+2就應該等於指向p所指的整數變數後面第二個整數變數的指標。於是(p+2)相應的實體地址,就應該等於p相應的實體地址加上2倍int變數的長度。 而對於陣列,又是按照指標的概念來規定的。

例如:a[2]就和*(a+2)完全等效。

10樓:匿名使用者

預設是從小到大的,如果是用陣列的話

連結串列等則不一定,因為他的地址是不連續的!

11樓:無病呻吟

記憶體是連續分佈的,地址也是連續排列的

如:int a[4]

有4個整形,a[1]的位置在a[0]的位置的後4個位元組(假設int佔用4個位元組)

記憶體的分配又是另一個話題了

12樓:匿名使用者

連續分配的記憶體空間是小到大的。。

如果是隨機分配的記憶體,每次分配的首地址是隨機的,所以不嫩比。

但是一次分配的記憶體空間,內部同樣是小到大。

13樓:未王艮

計算機裡面存資料有兩種方式

在小端儲存格式中,低地址中存放的是字資料的低位元組,高地址存放的是字資料的高位元組

大端則正好相反

儲存方式主要與計算機的cpu有關

c語言,棧是從高地址到低地址分配記憶體的,堆是從低地址到高地址分配記憶體的,是這樣嗎??

14樓:匿名使用者

你應該在定義一個int b 、比較b和a的變數的地址,就是按照從高到底。棧中的變數是從高地址往低地址分配,但是沒有說棧中的陣列也是這樣分配的,

15樓:

windows下棧是從高地址到低地址分配記憶體的,陣列的分配是當作單個變數來分配記憶體的

你可以再定義一個變數試試

16樓:匿名使用者

它是作為一個陣列整體放入的

17樓:匿名使用者

本來就應該是a[3]大於a[1]啊

c語言中怎麼儲存一個很大很大的數

18樓:小小小魚生活

c語言的系統型別,均有大小的限制。超出這個儲存範圍,就無法用該型別進行儲存。所以需要根據資料規模,來選擇儲存型別。

當需要儲存的數很大很大,超出所有可以型別可以表示的範圍時,比如一個100位的10進位制數,就需要用字串的方式進行儲存。這種儲存方式,在演算法中稱為大數儲存,對這種大數的計算,稱為大數計算。

19樓:匿名使用者

儲存大數時需要藉助字元陣列儲存

如儲存11111111111這個數字,可以用

char num = "11111111111";

20樓:匿名使用者

可以通過使用陣列來模擬一個大數,例 a表示123

21樓:歐文君愛分享

大數每一位加上'0',然後儲存到字元陣列中,這才是正確的做法

22樓:匿名使用者

如果不要求精度,可以直接用浮點型,精度不高而已。

如果要求精度高(比如儲存較大的指數,不允許截斷誤差存在),或者是已經超過了浮點型資料允許的最大值,可用多個位元組來儲存,每個位元組儲存其中一部分位段。可根據你的需要來設定所需位元組數。

比如,計算7的34次方的精確值,就需要至少4個整形來儲存(32位處理器,一個整形資料佔用4個位元組),即16個位元組。

具體可參見《計算機代數》教科書。

23樓:虧你_說的出

用高精度阿,,!好像10的40幾次方,,具體忘了..

單精度就已經有10的21次方了,,足夠用了吧,,

一個c程式執行系統允許最大分配記憶體是多少

24樓:du基咪

一個函式有一個最大的記憶體空間限制 大概是int的10000 記憶體空間和程式本身定義的變數有關 帶遞迴的程式記憶體空間是 本身定義的變數*遞迴層數 遞迴層數(就是從搜尋樹的高度)

25樓:叼著奶嘴成長

最大一般是剩餘可用空間的30%~40%

C語言 動態記憶體分配

p1 int malloc 10 sizeof int 就是生成了一個動態陣列啊 而且c語言裡p x 實際上就等價於 p x 只要p是指標型別的變數,不管它是陣列,還是其他什麼,都不會報錯 malloc函式的實質體現在,它有一個將可用的記憶體塊連線為一個長長的列表的所謂空閒連結串列。呼叫malloc...

C語言分配記憶體後怎麼刪除特定記憶體的數值

三種辦法 1 用一個額外的陣列表示menbers陣列中哪些是有效的,要刪除是隻需將menbers 3 對應的標誌置成不可用即可 2 使用一個變數menberscount來表示有效的company個數,刪除後將後繼的company依次前移一個company空間,前移時可以用memcpy函式。所有前移完...

C語言,在迴圈中定義變數的地址分配問題

1 理論上是不一樣的bai。但是在實du際中,如果僅僅是進行這zhi樣的迴圈,那麼地址dao是不變的,這回是因為剛剛i被分配 答的地址釋放後沒被其他量佔據,所以再分配的時候還是在原來的地方進行。2 可以寫個程式來檢測下,檢測的方法自然是單步執行,檢視a的地址比如下面的程式,可以檢視 a和p的值,會發...