社区
C语言
帖子详情
c语言的全局域空间是如何实现的?
zeloas
2007-03-06 06:14:08
c语言的全局变量是如何存储的?
存储全局变量的空间大小是固定的还是动态分配的?为什么?
如果是动态分配的,那么一般有多大?
...全文
378
7
打赏
收藏
c语言的全局域空间是如何实现的?
c语言的全局变量是如何存储的? 存储全局变量的空间大小是固定的还是动态分配的?为什么? 如果是动态分配的,那么一般有多大?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jixingzhong
2007-03-06
打赏
举报
回复
如果需要更进一步了解,
建议楼主看看 编译原理 ~
^_^
jixingzhong
2007-03-06
打赏
举报
回复
计算机理解力是没法和我们相比的,但是它比我们快。我们可以把这些变量分开来放,从不同地方取来的就是不同的变量。告诉计算机去找的就是符号表。当然,生成符号表是编译器的事,我们不用管。但是了解一点总是有好处的。这里我以Unix ELF (Executalbe and Linkable Format)格式文件为例说明编译器是怎么安排全局变量,静态变量和自动变量的位置的。
ELF可重定位目标文件包括:ELF头以及.text,.rodata, .data ,.bss ,.symtab, .rel.text, .rel.data 等节。
全局变量:已初始化的保存在.data段中 ,未初始化的表示为.bss段的一个占位符;
静态变量:根据是否初始化分别在.data 和.bss段中分配空间;
自动变量(非静态局部变量):在运行时保存在栈中。既不在.data 段中也不在.bss段中。
其实我们可以编写一个简单的程序,编译了以后用objdump命令查看。
知道了各种变量在运行时的位置也就知道了他们的储存期,而且了解变量的位置对编写高性能程序也非常有帮助。
我们知道嵌入式对程序的性能要求是非常高的,函数的参数列表越长那么函数调用的开销就越大,这个时候我们可以使用全局变量提高程序的性能。
将函数和变量声明为static可防止函数和变量被其它模块不正确的使用。
关于自动变量,请看下面的两个程序:
long product;
void factorialA(long n)
{
long i;
for(i = 1; i <= n;i++ ){
product *= i;
}
void factorialB(long n)
{
long i;
long x = 1;
for(i = 1; i <= n;i++ ){
x *= i;
}
product = x;
}
在n值较大的时候,上面两个程序的性能是有显著差别的。 这是利用了程序的局部性原理
jixingzhong
2007-03-06
打赏
举报
回复
动态也是可以地吧,定义全局的指针变量,然后malloc,以前的c可能不行
=================================
那就是只有指针是 全局的,
指向的空间不是全局的(虽然是全局有效,但是只要是动态分配的就都是全局有效的)
jixingzhong
2007-03-06
打赏
举报
回复
全局变量被存储在数据段,大小自然是静态的,也就是你定义的大小。
happytang
2007-03-06
打赏
举报
回复
http://community.csdn.net/Expert/topic/5359/5359624.xml?temp=.8627283
happytang
2007-03-06
打赏
举报
回复
全局变量最好还是静态分配,大小就是固定地;
动态也是可以地吧,定义全局的指针变量,然后malloc,以前的c可能不行
看系统内存能承受多大了,几十M我也申请过
goodluckyxl
2007-03-06
打赏
举报
回复
全局变量看你自己申请了
可以固定可以不固定啊
没有经验值 看你自己需要了
有些程序可能开个1-10k就够了
有些则需要1-10m
基于多客户端 TCP 的 Qt 网络通信
基于多客户端 TCP 的 Qt 网络通信
QT学习TCP/IP通信(一个服务端对多个客户端)
Qt TCP/IP通信
Qt tcp socket编程
《学习笔记》 QTcpSever用于监听,QTcpSocket用于连接客户端和服务端。 客户端连接服务端很简单,connectToHost(QHostAddress("IP", 666);,填写IP和端口就可以,连接成功后,再关联信号readyRead()就可以读取服务端发送过来的数据了 服务端首先监听某个端口,看是否有连接到该端口的机器,然后获取客户端连接的socket有两种方法: 1:
QT(33)-qt5-TCPSERVER-网络调试助手-QTcpSocket -QTcpServer
在UBUNTU20.04,QT5写了一个TCP服务器端的小程序。左边是客户端,右边为服务器端。
QT 网络编程 多客户端处理
确保对每个客户端的QTcpSocket对象进行适当的管理(例如,存储在列表中以便跟踪和引用),并在不再需要时适当地删除它们。在槽函数中,你可以接受新的连接,并为每个客户端创建一个QTcpSocket对象。通常,我们会将这个QTcpSocket对象存储起来(例如,存储在一个容器如QList
中),以便后续处理。你需要连接这个信号到一个槽函数,以便处理新的连接。首先,你需要创建一个QTcpServer对象,并绑定到本地端口上,以便服务器能够接收客户端的连接请求。// 存储客户端连接。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章