常量能获取地址吗?

简介: 常量能获取地址吗?

我们先来看一段代码:

const cl = 100
var bl = 123
func check_const() {
  fmt.Println(&bl, bl)
  fmt.Println(&cl, cl) 
}

我们试图去编译这段代码,编译期会报如下错误:

Cannot take the address of 'cl'

这说明我们无法获取到 cl 的地址。

为什么我们不能获取到 cl 的地址呢?


常量不同于变量的在运行期分配内存,常量通常会被编译器在预处理阶段直接展开,作为指令数据使用内存四区概念:


数据类型本质:


固定内存大小的别名


数据类型的作用:


编译器预算对象(变量)分配的内存空间大小。


内存四区

流程说明

1、操作系统把物理硬盘代码load到内存


2、操作系统把c代码分成四个区


3、操作系统找到main函数入口执行

栈区(Stack):

空间较小,要求数据读写性能高,数据存放时间较短暂。由编译器自动分配和释放,存放函数的参数值、函数的调用流程方法地址、局部变量等(局部变量如果产生逃逸现象,可能会挂在在堆区)

堆区(heap):

空间充裕,数据存放时间较久。一般由开发者分配及释放(但是 Go 中会根据变量的逃逸现象来选择是否分配到栈上或堆上),启动 GoGCGC清除机制 自动回收。

全局区-静态全局变量区:

全局变量的开辟是在程序在 main 之前就已经放在内存中。而且对外完全可见。即作用域在全部代码中,任何同包代码均可随时使用,在变量会搞混淆,而且在局部函数中如果同名称变量使用 := 赋值会出现编译错误。


全局变量最终在进程退出时,由操作系统回收。


我们在开发的时候,尽量减少使用全局变量的设计

全局区-常量区:

常量区也归属于全局区,常量为存放数值字面值单位,即不可修改。或者说的有的常量是直接挂钩字面值的。

比如:

const cl = 10


cl 是字面量 10 的对等符号。


所以在 Go 中,常量是无法取出地址的,因为字面量符号并没有地址而言。

相关文章
|
Ubuntu Java 测试技术
【Linux】一站式教会:Ubuntu(无UI界面)使用apache-jmeter进行压测
【Linux】一站式教会:Ubuntu(无UI界面)使用apache-jmeter进行压测
537 1
|
存储 Java Linux
TeamTalk - 蘑菇街开源的一款企业办公即时通信软件
TeamTalk 是蘑菇街开源的一款企业办公即时通信软件,最初是为自己内部沟通而做的 IM 工具。团队自己的介绍如下: 2013年我们蘑菇街从社区导购华丽转身时尚电商平台,为解决千万妹子和时尚卖家的沟通问题,我们开发了自己的即时通讯软件。既然已经有了用户使用的IM,为什么我们自己公司内部沟通还要用第三方的呢?因此就有了TT(TeamTalk)的雏形,现在蘑菇街内部的在线沟通全部通过TT来完成。随着TT功能的逐渐完善,我们决定把TT开源来回馈开源社区,希望国内的中小企业都能用上开源、免费、好用的IM工具!
1302 0
TeamTalk - 蘑菇街开源的一款企业办公即时通信软件
|
存储
wsl的存储路径
wsl的存储路径
|
9月前
|
机器学习/深度学习 物联网 PyTorch
小白避坑指南:国内用Colossal-AI微调DeepSeek 1.5B的完整踩坑记录(附镜像加速方案)
本文详细记录了使用Colossal-Ai对DeepSeek-Qwen模型进行微调的过程,包括模型下载、环境部署、数据集处理及代码实现等环节。重点介绍了LoRA低秩适配方法和Colossal-Ai分布式训练框架的使用技巧,解决了模型封装后函数调用冲突、梯度检查点配置等问题。通过命令行参数灵活调整训练配置,最终在两块A100 GPU上完成训练,单卡显存占用约11GB,利用率达85%。文章总结了常见问题及解决方法,为后续研究提供参考。
762 15
小白避坑指南:国内用Colossal-AI微调DeepSeek 1.5B的完整踩坑记录(附镜像加速方案)
|
11月前
|
存储 人工智能 缓存
面向AI的存储软硬结合实践和创新
本次分享的主题是面向AI的存储软硬结合实践和创新,由阿里云智能集团专家袁茂军、王正勇和常存银主讲。内容涵盖三大板块:自研存储部件设计及实践、自研存储服务器设计及实践、以及面向AI场景的存储软硬一体解决方案及实践。重点介绍AliFlash系列存储部件的演进与优化,包括QLC SSD的设计挑战与解决方案,并探讨了高性能存储服务器在AI场景中的应用与未来发展方向。通过软硬件深度融合,旨在提升AI业务的性能与效率,降低总拥有成本(TCO)。
568 7
|
存储 监控 算法
ARM:CoreSight、ETM、PTM、ITM、HTM、ETB等常用术语解析
ARM:CoreSight、ETM、PTM、ITM、HTM、ETB等常用术语解析
1583 0
|
存储 缓存 安全
Painless scripting — Elastic Stack 实战手册
Painless scripting 是一种简单的、安全的针对 Elasticsearch 设计的脚本语言,Painless 可以使用在任何可以使用 scripting 的场景
907 0
Painless scripting — Elastic Stack 实战手册
|
Web App开发 存储 网络协议
C/C++ 数据结构设计与应用(四):C++数据压缩与传输:从理论到实践的全景解析
C/C++ 数据结构设计与应用(四):C++数据压缩与传输:从理论到实践的全景解析
765 3
|
数据采集
【大模型】大语言模型训练数据中的偏差概念及其可能的影响?
【5月更文挑战第5天】【大模型】大语言模型训练数据中的偏差概念及其可能的影响?
|
开发工具 git
Git:推送到新的远程地址;更改本地和远程分支的名称
Git:推送到新的远程地址;更改本地和远程分支的名称