国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

關于define與C 的內存

2020-01-26 14:31:21
字體:
來源:轉載
供稿:網友

問題1:#define到底存在程序的哪個區?

自己寫了一個小程序驗證一下第一個問題。

程序代碼:

<span style="font-size:18px;">#include <stdio.h>#include <STDLIB.H>#define kMAX 100typedef struct {	int ID;	char * name;}Student;void test(){	return;}

//常量區,靜態區,堆區,棧區,程序代碼區

const int a = 100;char * b = "ok123";int main(){	Student stu = {10,"張三"};	int n = 9999;	int *p = &n;	int num[10] = {1,2,3,4};	int *ap=(int*)malloc(100*sizeof(int));//動態分配內存	static int k = 9;	printf("常量區/n");	printf("const int(%p)/n",&a);	printf("char *(%p)/n",b);	printf("靜態區/n");	printf("static int (%p)/n",&k);	printf("堆區/n");	printf("(int*)malloc(100*sizeof(int))(%p)/n",ap);	printf("棧區/n");	printf("struct int(%p),struct char *(%p)/n",&stu.ID,&stu.name);	printf("int [](%p)/n",num);	printf("int *(%p)/n",&p);	printf("int(%p)/n",&n);	printf("程序代碼區/n");	printf("test()(%p)/n",test);	printf("未知/n");	printf("define (%p)/n",kMAX);		free(ap);	return 0;}</span>

 發現:

1、通過運行代碼可以看出程序的幾個內存區互不相鄰;

2、#define的內存單元在程序運行前已經分配。

3、我們知道,char *會存在常量區,但如果我們把char *“封裝”到一個struct里,這時它會同該struct分配到棧區中,也就是說,我們可以修改struct中char *里的值。

----------------------------------------------------------------------------------------------------------------------------------------------------------

問題2:我們已經知道,宏實質上是替換,而函數是傳參,調用。那么,帶參數宏與普通函數在效率上有什么區別?

通過查閱一些資料了解到

1、普通函數是在程序運行時調用,程序會給它的成員分配內存。而帶參宏是在編譯前就已經執行,并且不會分配內存單元。

2、宏替換不占用運行時間,只占用編譯時間。函數則占用運行時間。所以,如果想提高程序運行效率,可以用宏代替部分函數。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 开化县| 梧州市| 惠水县| 清丰县| 永善县| 荣昌县| 嘉义县| 新宾| 韶山市| 十堰市| 江北区| 江永县| 怀柔区| 合江县| 水城县| 阿坝| 沭阳县| 弥渡县| 河北省| 连云港市| 德清县| 醴陵市| 江门市| 太仓市| 宣武区| 田林县| 安阳县| 休宁县| 图片| 九龙县| 鄂尔多斯市| 南充市| 安平县| 衡阳市| 连云港市| 通城县| 江川县| 思茅市| 宝山区| 当涂县| 陈巴尔虎旗|