程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 關於define與C 的內存

關於define與C 的內存

編輯:關於C++

關於define與C 的內存。本站提示廣大學習愛好者:(關於define與C 的內存)文章只能為提供參考,不一定能成為您想要的結果。以下是關於define與C 的內存正文


成績1:#define究竟存在法式的哪一個區?

本身寫了一個小法式驗證一下第一個成績。

法式代碼:

<span >#include <stdio.h>
#include <STDLIB.H>
#define kMAX 100
typedef 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、宏調換不占用運轉時光,只占用編譯時光。函數則占用運轉時光。所以,假如想進步法式運轉效力,可以用宏取代部門函數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved