C语言和其他高级语言的最大区别是什么?

一、静态内存
[cpp] view plain copy1. #include <stdio.h> 2. 3. int a = 0;// 全局初始化区 4. char *p1; //全局未初始化区 5. 6. int main() 7. { 8. int b; //b在栈区 9. char s[] = 'abc'; //栈 10. char *p2; //p2在栈区 11. 12. char *p3 = '123456'; //123456\0在常量区,p3在栈上。13. static int c =0;//全局(静态)初始化区 14. 15. p1 = (char *)malloc(10); 16. p2 = (char *)malloc(20); //分配得来得10和20字节的区域就在堆区。17. 18. strcpy(p1, '123456'); //123456\0放在常量区,编译器可能会将它与p3所指向的'123456'优化成一个地方。19. }[cpp] view plain copy1. #include <stdio.h> 2. 3. void *malloc(size_t size);
[cpp] view plain copy1. int *get_memory(int n) 2. { 3. int *p; 4. p = (int *)malloc(sizeof(int)); 5. if(p == NULL) 6. { 7. printf('malloc error\n'); 8. return p; 9. } 10. 11. memset(p,0,n*sizeof(int)); 12. }3)显示初始化。即我们不知这块内存中有什么东西,要对其清零;
[cpp] view plain copy#include <stdlib.h> void free(void *ptr);
[cpp] view plain copyfree(p); p = NULL;2、我们经常将堆和栈相比较:
2.2 申请后系统的响应
char s1[] = 'aaaaaaaaaaaaaaa'; char *s2 = 'bbbbbbbbbbbbbbbbb';
而bbbbbbbbbbb是在编译时就确定的;
但是,在以后的存取中,在栈上的数组比指针所指向的字符串(例如堆)快。
[cpp] view plain copy1. #include 2. void main() 3. { 4. char a = 1; 5. char c[] = '1234567890'; 6. char *p ='1234567890'; 7. a = c[1]; 8. a = p[1]; 9. return; 10. } 对应的汇编代码 [cpp] view plain copy1. 0: a = c[1]; 2. 00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh] 3. 0040106A 88 4D FC mov byte ptr [ebp-4],cl 4. 11: a = p[1]; 5. 0040106D 8B 55 EC mov edx,dword ptr [ebp-14h] 6. 00401070 8A 42 01 mov al,byte ptr [edx+1] 7. 00401073 88 45 FC mov byte ptr [ebp-4],al总结
赞 (0)
