⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch03-memaddr.c

📁 linux编程精髓 源代码
💻 C
字号:
/* * ch03-memaddr.c --- Show address of code, data and stack sections, *                    as well as BSS and dynamic memory. */#include <stdio.h>#include <malloc.h>		/* for definition of ptrdiff_t on GLIBC */#include <unistd.h>#include <alloca.h>		/* for demonstration only */extern void afunc(void);	/* a function for showing stack growth */int bss_var;			/* auto init to 0, should be in BSS */int data_var = 42;		/* init to nonzero, should be data */intmain(int argc, char **argv)	/* arguments aren't used */{	char *p, *b, *nb;	printf("Text Locations:\n");	printf("\tAddress of main: %p\n", main);	printf("\tAddress of afunc: %p\n", afunc);	printf("Stack Locations:\n");	afunc();	p = (char *) alloca(32);	if (p != NULL) {		printf("\tStart of alloca()'ed array: %p\n", p);		printf("\tEnd of alloca()'ed array: %p\n", p + 31);	}	printf("Data Locations:\n");	printf("\tAddress of data_var: %p\n", & data_var);	printf("BSS Locations:\n");	printf("\tAddress of bss_var: %p\n", & bss_var);	b = sbrk((ptrdiff_t) 32);	/* grow address space */	nb = sbrk((ptrdiff_t) 0);	printf("Heap Locations:\n");	printf("\tInitial end of heap: %p\n", b);	printf("\tNew end of heap: %p\n", nb);	b = sbrk((ptrdiff_t) -16);	/* shrink it */	nb = sbrk((ptrdiff_t) 0);	printf("\tFinal end of heap: %p\n", nb);}voidafunc(void){	static int level = 0;		/* recursion level */	auto int stack_var;		/* automatic variable, on stack */	if (++level == 3)		/* avoid infinite recursion */		return;	printf("\tStack level %d: address of stack_var: %p\n",			level, & stack_var);	afunc();			/* recursive call */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -