C语言每一次函数调用,编译器都会为这个函数调用分配一段空间,这段空间用来存放该函数中的所有局部变量和调用其它函数时需要传递的参数的副本。每一次调用这个函数,这段空间都会重新分配,函数返回后这段空间就被释放了,所以重复调用多少次都不会影响的。所有的这些函数调用时候分配的内存都是在线程的栈上的。
专注于为中小企业提供成都网站建设、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业志丹免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了数千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
顺便说一下,我觉得楼上的回答是不对的: 每个线程都只会访问自己调用的函数中的局部变量的,访问局部变量是不会存在多线程问题的。会存在多线程问题的肯定不是局部变量,有可能是局部变量指向的其它可共享的对象(例如:堆对象......),或者在函数中访问了全局对象,类的成员变量等,这些并不是局部变量。
在C语言中声明和定义是不同的,只有当你定义变量的时候系统才会给你的变量分配内存,例如int a;(是定义),extern int a;(是声明),前者会分配,而后者不会;只要你定义变量就分配,int a;int a = 10;都是定义,都会分配!!
变量定义的同时,必然分配内存,但有一些的动态分配的。
例如:int 4字节;char 1字节;float 4字节,double 8字节
以下宫参考:
The memory a program uses is typically divided into four different areas:
C++将程序内存分为4个区:
The code area, where the compiled program sits in memory.
代码区:程序体所在的区域;
The globals area, where global variables are stored.
全局区:存储全局变量;
The heap, where dynamically allocated variables are allocated from.
堆:存储动态分配的变量;
The stack, where parameters and local variables are allocated from.
栈:存储参数和局部变量。