1、测试栈(heap)的生长方向
1. #include <stdio.h> 2. #include <stdlib.h> 3. 4. //栈属性 5. /* 6. 栈是向下生长的 7. 栈的生长方向和内存空间buf存放方向两个不同的概念 8. */ 9. 10. //堆是向上生长的 11. 12. 13. //演示:stack生长方向 14. int main() 15. { 16. float *p1 = NULL; 17. int *p2 = NULL; 18. int a = 0; 19. int b = 0; 20. char buf[16]; 21. 22. printf("&p1:%x, &p2:%x, &a:%x, &b:%x.\n", &p1, &p2, &a, &b); //观察栈的伸张方向 23. printf("&buf[0]:%x, &buf[1];%x.\n", &buf[0], &buf[1]); //观察内存存放方向 24. 25. system("pause"); 26. }
运行结果如下:
对应的内存模型如下:
可以看出:堆是向下生长的,但是在堆中开辟的内存,是从下往上存放数据的
2、写代码测试堆(stack)的生长方向
1. #include <stdio.h> 2. #include <stdlib.h> 3. 4. 5. //演示heap生长方向 6. int main() 7. { 8. int a = 0; 9. int b = 0; 10. char *p1 = NULL; 11. char *p2 = NULL; 12. p1 = (char *)malloc(16); 13. p2 = (char *)malloc(16); 14. 15. printf("p1:%x, p2:%x.\n", p1, p2); 16. //printf("&p1:%x, &p2:%x.\n", &p1, &p2); 17. 18. system("pause"); 19. }
运行结果如下:
可以看到堆是向上生长的