關(guān)于define與C 的內(nèi)存
問題1:#define到底存在程序的哪個區(qū)?
自己寫了一個小程序驗證一下第一個問題。
程序代碼:
<span style="font-size:18px;">#include <stdio.h> #include <STDLIB.H> #define kMAX 100 typedef struct { int ID; char * name; }Student; void test() { return; }
//常量區(qū),靜態(tài)區(qū),堆區(qū),棧區(qū),程序代碼區(qū)
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));//動態(tài)分配內(nèi)存 static int k = 9; printf("常量區(qū)\n"); printf("const int(%p)\n",&a); printf("char *(%p)\n",b); printf("靜態(tài)區(qū)\n"); printf("static int (%p)\n",&k); printf("堆區(qū)\n"); printf("(int*)malloc(100*sizeof(int))(%p)\n",ap); printf("棧區(qū)\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("程序代碼區(qū)\n"); printf("test()(%p)\n",test); printf("未知\n"); printf("define (%p)\n",kMAX); free(ap); return 0; }</span>
發(fā)現(xiàn):
1、通過運行代碼可以看出程序的幾個內(nèi)存區(qū)互不相鄰;
2、#define的內(nèi)存單元在程序運行前已經(jīng)分配。
3、我們知道,char *會存在常量區(qū),但如果我們把char *“封裝”到一個struct里,這時它會同該struct分配到棧區(qū)中,也就是說,我們可以修改struct中char *里的值。
----------------------------------------------------------------------------------------------------------------------------------------------------------
問題2:我們已經(jīng)知道,宏實質(zhì)上是替換,而函數(shù)是傳參,調(diào)用。那么,帶參數(shù)宏與普通函數(shù)在效率上有什么區(qū)別?
通過查閱一些資料了解到
1、普通函數(shù)是在程序運行時調(diào)用,程序會給它的成員分配內(nèi)存。而帶參宏是在編譯前就已經(jīng)執(zhí)行,并且不會分配內(nèi)存單元。
2、宏替換不占用運行時間,只占用編譯時間。函數(shù)則占用運行時間。所以,如果想提高程序運行效率,可以用宏代替部分函數(shù)。
您可能感興趣的文章
- 01-10全排列算法的非遞歸實現(xiàn)與遞歸實現(xiàn)的方法(C++)
- 01-10深入理解atoi()與itoa()函數(shù)的用法
- 01-10淺談C/C++中的static與extern關(guān)鍵字的使用詳解
- 01-10基于atoi()與itoa()函數(shù)的內(nèi)部實現(xiàn)方法詳解
- 01-10Linux線程管理必備:解析互斥量與條件變量的詳解
- 01-10深入理解大數(shù)與高精度數(shù)的處理問題
- 01-10深入理解數(shù)組指針與指針數(shù)組的區(qū)別
- 01-10C語言游戲必備:光標(biāo)定位與顏色設(shè)置的實現(xiàn)方法
- 01-10深入探討C語言中局部變量與全局變量在內(nèi)存中的存放位置
- 01-10linux c 查找使用庫的cflags與libs的方法詳解


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10C#中split用法實例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery