社区
C语言
帖子详情
全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的?
soarhigh
2002-10-31 12:54:58
thank u
...全文
15044
21
打赏
收藏
全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的?
thank u
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hehe214
2002-11-01
打赏
举报
回复
xuexi
GOTO_2002
2002-11-01
打赏
举报
回复
全局变量和局部变量的区别方法就是他们的作用域不同。在同一作用域中如果两个变量的名字相同,遵循低作用域覆盖高作用域的原则。例如:
int a;
class c
{
private:
int a;
public:
void b();
}
c::b()
{
int a;
a=15; //这里的a就是b()中声明的a;
c::a=15; //这里的a是class c声明的a;
::a=15; //这里的a是全局变量a;
}
操作系统只管执行机器指令,把内存某个地址(存放变量a)推进区某个值,然后进行运算。
x2jack
2002-11-01
打赏
举报
回复
全局变量和局部变量的作用域不同,在函数中出现变量名同全局变量同名时以函数中的变量作为操作数,当函数返回时,函数中的变量即结束了生存期,变量值为全局变量的值。编译器是以栈结构保存信息以实现的。
int i=5;
main()
{
printf("%d\n",i);
add()
printf("%d\n",i);
}
void add()
{ int i=10;
printf("%d\n",i);
}
结果:
5
10
5
关门兔
2002-11-01
打赏
举报
回复
那如果局部变量是静态的呢?
ckacka
2002-11-01
打赏
举报
回复
cwanter(小菜)说得很好!
datougui
2002-11-01
打赏
举报
回复
局部变量,是具有块作用域的。如果把数据存储在局部变量里,函数在不同的块之间只能通过参数传递来共享数据。
shitalone
2002-11-01
打赏
举报
回复
同意小菜!没什么好说的了
rivershan
2002-11-01
打赏
举报
回复
一个声明由四个部分组成:一个可选的描述符,一个基础类型,一个声明符,和一个可选的初始式。局部变量的作用域从它声明的那一点开始,直到这个声明所在的块结束为止。全局变量的作用域从它声明的那一点开始,一直到这个声明所在的文件的结束。一个块里声明的名字可以遮蔽在其外围的块里所声明的名字或者全局的名字。被遮蔽的全局名字可以通过作用域解析运算符::去引用。没有办法使用被遮蔽的局部名字。一个名字的作用域从它被声明的那点开始,初始式开始之前。函数参数被当作函数最外层的块中的声明。
回炉重造,学习编程中。。。
2002-11-01
打赏
举报
回复
同意 cwanter(小菜)
GOTO_2002
2002-11-01
打赏
举报
回复
学习ing~~~~
关门兔
2002-11-01
打赏
举报
回复
局部静态变量的作用域好理解,生命周期能说得详细点吗?还有内存分配方式。
xdspower
2002-11-01
打赏
举报
回复
那如果局部变量是静态的呢
局部静态变量在定义模块之外是不可见的(理论上——有特殊方法可见——传出变量的指针,这在有的编译器中要出警告或错误)
Bandry
2002-11-01
打赏
举报
回复
全局变量是在所有函数之外声明的变量,局部变量则是在函数体内声明的变量。全局变量放在内存的全程数据区,局部变量在栈上申请。全局数据区分为两部分全局数据区和静态数据区,静态数据区专门存放static变量。static的全局变量只在该文件范围内可见,不能用extern声明为外部变量。
编译器会自动初始化全局变量。
JanePeter
2002-10-31
打赏
举报
回复
1生存周期不同
2 作用范围不同
3 分配方式不同
4 安全感不同
5 用途不同!
IEQQ
2002-10-31
打赏
举报
回复
小菜的论述比较全面哦。
稍稍补充,全局变量在程序运行期间长驻内存,直到程序运行结束,
局部变量 动态分配内存,
尽量少用全局变量
cwanter
2002-10-31
打赏
举报
回复
全局变量和局部变量的区别主要在于生存周期不同,全局变量在整个程序生成期间可见,局部变量在自己的作用域内可见。全局变量的内存分配是静态的,位于PE文件在数据区,在main()前由C、C++运行期函数初始化,如果没有初值,会被初始化为0。局部变量的内存分配是动态的,位于线程堆栈中。如果没有初始化的,初值视当前内存内的值而定。
ywchen2000
2002-10-31
打赏
举报
回复
通过{},如果在大括号外,就不是全局变量
jlqidan
2002-10-31
打赏
举报
回复
还有,关于变量作用域的问题就是,在函数里有与全局变量同名的局部变量,则在此函数范围内局部变量覆盖全局变量。
使用全局变量不是个好办法,c#把一切都封装进类,已经没有全局变量的概念了
arcsiny
2002-10-31
打赏
举报
回复
能用局部就不要用全局
编译起来没有效率
ToUpdate
2002-10-31
打赏
举报
回复
UP!
加载更多回复(1)
go高并发分布式与微服务
go
实
战微服务分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的
区别
更多的在于高层软件(特别是
操作系统
),而不是硬件。在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络
实
现
信息交换。系统中存在一个以全局的方式管理计算机资源的分布式
操作系统
。通常,对用户来说,分布式系统只有一个模型或范型。在
操作系统
之上有一层软件中间件(middleware)负责
实
现
这个模型。一个著名的分布式系统的例子是万维网(World Wide Web),在万维网中,所有的一切看起来就好像是一个文档(Web页面)一样。 [1] 在计算机网络中,这种统一性、模型以及其中的软件都不存在。用户看到的是
实
际的机器,计算机网络并没有使这些机器看起来是统一的。如果这些机器有不同的硬件或者不同的
操作系统
,那么,这些差异对于用户来说都是完全可见的。如果一个用户希望在一台远程机器上运行一个程序,那么,他必须登陆到远程机器上,然后在那台机器上运行该程序。 [1] 分布式系统和计算机网络系统的共同点是:多数分布式系统是建立在计算机网络之上的,所以分布式系统与计算机网络在物理结构上是基本相同的。 [1] 他们的
区别
在于:分布式
操作系统
的设计思想和网络
操作系统
是不同的,这决定了他们在结构、工作方式和功能上也不同。网络
操作系统
要求网络用户在使用网络资源时首先必须了解网络资源,网络用户必须
知道
网络中各个计算机的功能与配置、软件资源、网络文件结构等情况,在网络中如果用户要读一个共享文件时,用户必须
知道
这个文件放在哪一台计算机的哪一个目录下;分布式
操作系统
是以全局方式管理系统资源的,它可以为用户任意调度网络资源,并且调度过程是“透明”的。当用户提交一个作业时,分布式
操作系统
能够根据需要在系统中选择最合适的处理器,将用户的作业提交到该处理程序,在处理器完成作业后,将结果传给用户。在这个过程中,用户并不会意识到有多个处理器的存在,这个系统就像是一个处理器一样。 [1] 内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在分布式数据库系统中,用户感觉不到数据是分布的,即用户不须
知道
关系是否分割、有无副本、数据存于哪个站点以及事务在哪个站点上执行等。 什么是微服务?维基上对其定义为:一种软件开发技术- 面向服务的体系结构(SOA)架构样式的一种变体,将应用程序构造为一组松散耦合的服务。在微服务体系结构中,服务是细粒度的,协议是轻量级的。微服务(或微服务架构)是一种云原生架构方法,其中单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成。这些服务通常● 有自己的堆栈,包括数据库和数据模型;● 通过REST API,事件流和消息代理的组合相互通信;● 和它们是按业务能力组织的,分隔服务的线通常称为有界上下文。尽管有关微服务的许多讨论都围绕体系结构定义和特征展开,但它们的价值可以通过相当简单的业务和组织收益更普遍地理解:● 可以更轻松地更新代码。● 团队可以为不同的组件使用不同的堆栈。● 组件可以彼此独立地进行缩放,从而减少了因必须缩放整个应用程序而产生的浪费和成本,因为单个功能可能面临过多的负载。
全局变量
和
局部变量
有什么
区别
?是怎么
实
现
的?
操作系统
和
编译器
是怎么
知道
的?
生命周期不同:
全局变量
随主程序创建和创建,随主程序销毁而销毁;
局部变量
在局部函数内部,甚至局部循环体等内部存在,退出就不存在; 内存中分配在全局数据区。 使用方式不同:通过声明后
全局变量
程序的各个部分都可以用到;
局部变量
只能在局部使用;分配在栈区。
操作系统
和
编译器
通过内存分配的位置来
知道
的,
全局变量
分配在全局数据段并且在程序开始运行的时候被加载。
局部变量
则分配在堆栈里面 。
软件测试 |
全局变量
和
局部变量
有什么
区别
?
如果是
全局变量
的话,
编译器
在将源代码翻译成二进制代码时就为了
全局变量
分配好一个虚拟地址(Windows 下0x00400000以上的地址,也就是所说的全局区),所以,程序在对
全局变量
的操作时是对一个硬编码的地址操作。
局部变量
,编译时不分配空间,而是以相当于ebp或esp的偏移来表示
局部变量
的地址,所以,
局部变量
内存是在
局部变量
所在的函数被调用时才真正分配。以汇编的角度来看:函数执行时,
局部变量
在栈中分配,函数调用完毕释放
局部变量
对应的内存,另外,
局部变量
可以直接分配在寄存器中。
C++-
全局变量
和
局部变量
有什么
区别
?
操作系统
和
编译器
是怎么
知道
的?
当
编译器
遇到一个变量时,会根据变量的作用域和存储类型,来确定它们的存储位置和生命周期,并将这些信息记录在符号表中,在程序执行时,
操作系统
就可以。,识别变量的类型,是
全局变量
,还是
局部变量
,然后对其进行内存管理和生命周期管理。
操作系统
和
编译器
通过。
C语言
69,373
社区成员
243,079
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章