C語言,記憶體管理問題,C語言問題 記憶體的分配方式有哪幾種?

2022-05-06 22:30:24 字數 2481 閱讀 3648

1樓:空雪夢見

一樣大。

name是char指標型別,它只記錄地址,不記錄地址裡面存的東西所以不管存多少東西,地址的長度是不會變的。

這個sizeof struct mm的長度目測是8(在32位程式裡)

2樓:擁雲莊主

變數定義之後,就會給變數分配空間了,不管你有沒有給它賦值。

32位系統下,sizeof(struct mm)為8位元組,int佔4位元組,char *指標型別,都是4位元組,所以,是8位元組。

分配好之後,並不能直接給name賦值,因為它只是一個字元型指標,但此時還沒有指向任何空間,如果是區域性變數,是隨機值,指向的也是隨機的空間,所以,通常會給初始化為null,在你需要用到name的時候,還需要重新給這個指標分配空間,或者指向已經存在的空間。示例**:

struct mm

*p;//定義mm型別的指標p;

char cname = "jone";

p=(struct mm*)malloc(sizeof(struct mm));//給p分配空間

p->tall = 175;//給tall賦值

p->name = cname;//讓name指向已經存在的cname,也可以給name動態分配空間,如:

p->name = (char *)malloc(10);//分配10個位元組大小的空間,並轉換為char *型

memset(p->name, 0, 10);//初始化

strcpy(p->name, "jone");//賦值

free(p->name);//釋放空間

free(p);//釋放空間,否則會有記憶體洩露

3樓:

1 分配了長度為sizeof(struct mm)位元組的連續區域,並把這個區域的首地址給p。注意:加了兩個字「位元組」哦。

2 sizeof(struct mm)的值一般為8,mm結構體有兩個成員,一個是整型,一個是指標型,這兩種資料型別一般都是佔用4位元組的儲存空間,加起來是8個位元組。

3 name的型別是char *,為指標型別變數(其值為地址值),不需要賦值就可以確定其佔用的空間大小,不能確定的是它指**。

4樓:徐徐隨風倒

你結構體中name 是 char * 型別的 即指標,所以在32位系統中的name 佔4個位元組的空間,

記住 char* 存的是地址 ,以後你要賦值的話 需要給name 分配空間,name 存的地址 指向你所分配的空間

5樓:鏡面世界

name是char*型,無論字串多長,就算短到空字串,長到255個字元,都是4個位元組

c語言問題:記憶體的分配方式有哪幾種?

6樓:吉祥二進位制

記憶體分配方式有三種:

1、從靜態儲存區域分配。記憶體在程式編譯的時候就已經分配好,這塊記憶體在程式的整個執行期間都存在。例如全域性變數,static變數。

2、在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內建於處理器的指令集中,效率很高,但是分配的記憶體容量有限。

3、從堆上分配,亦稱動態記憶體分配。程式在執行的時候用malloc或new申請任意多少的記憶體,程式設計師自己負責在何時用free或delete釋放記憶體。動態記憶體的生存期由程式設計師決定,使用非常靈活,但如果在堆上分配了空間,就有責任**它,否則執行的程式會出現記憶體洩漏,頻繁地分配和釋放不同大小的堆空間將會產生堆內碎塊。

關於c語言中函式呼叫時記憶體管理方面的問題。

7樓:匿名使用者

請貼全**,lz描述不全。首先,函式前的static只是說明,本函式僅供本檔案呼叫,而不是返回靜態變數。其次,函式記憶體都是棧自動分配的,不會導致佔用1g記憶體,只有不斷向系統申請記憶體才會出現如此情況 。

既然lz這樣說了,給你個建議吧:先設程式用mlloc分配,則把所有malloc替換為mymalloc然後加入**:

void *mymalloc(int isize)

8樓:匿名使用者

一般情況下c裡能造成你這種效果的唯一可能就是 malloc之類申請的記憶體沒用free之類釋放。非一般情況指你用更底層的方法(比如windows得heapalloc之類)申請記憶體來著

----

生化的基本原理我倒是還懂的,並且我堅信就算小學沒上過自然課的程式設計師也能看出來你的問題出在哪兒|||

9樓:

static說明的靜態區域性變數不會隨著函式的執行結束而被釋放,簡單的說靜態區域性變數的生存期與程式相同,而不是與函式相同。所以如果你的靜態字元型指標p,在子函式內不斷地申請開闢空間,而沒有有效地釋放將空間歸還給系統,就會出現你說的情況。

10樓:

囧...

你的陣列定義的size是n+1,引數傳進去的size是n。

引數呼叫方法沒錯,細心,細心啊,老兄...

C語言問題C語言問題,C語言問題C語言問題

include include int main b k p b k 0 puts b return 0 c語言問題c語言問題 include int main int h,m scanf d d h,m printf s num h if m 0 else printf o clock print...

C語言問題,C語言問題C語言問題

這題考的是自動型別轉換,由編譯系統自動完成,轉換是 向上 靠的 舉個例子 include stdio.h void main 你編譯一下就會有警告 conversion from double to float possible loss of data 也就是說系統預設轉化了a,b的資料型別為do...

c語言問題,C語言問題

1 c2 a 3 d4 a 5 d6 b 7 a8 a9 d c語言問題 include define n 30 typedef struct student student r n int main void num 1 for i 0 ir max score max j if max i if...