#include <stdio.h>
#include <stdlib.h>
#define SMALLER(a, b) ((a)>(b) ? (b) : (a))
#define MIN(a, b, c) SMALLER(SMALLER(a,b), c)
#define ABS(x) ((x) < 0 ? -(x) : (x))
void test(int *p)
{
int x;
static int y = 1;
static int *q = (int *)malloc(sizeof(int));
unsigned int u = ABS((unsigned int)q-(unsigned int)p);
unsigned int v = ABS((unsigned int)&x-(unsigned int)p);
unsigned int w = ABS((unsigned int)&y-(unsigned int)p);
unsigned int s = MIN(u, v, w);
if(p == NULL)
{
printf("test() in file %s: NULL pointer parameter. ", __FILE__);
return ;
}
if(s == u)
{
printf("p located in heap. ");
}
else if(s == v)
{
printf("p located in stack. ");
}
else
{
printf("p located in data section. ");
}
}
int a[100] = {1};
int main(void)
{
int *b = (int *)malloc(100);
int c[100];
test(a);
test(b);
test(c);
free(b);
return 0;
}
以下是该程序作者的解释:
利用各编译器处理变量和动态内存分配的公共策略,那就是分块处理,是最切实可行的办法。相信有经验的C/C++开发人员都不会否认以下事实:
http://blog.sina.com.cn/s/blog_73b3cd8c0100paf5.html