首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么函数指针是12字节长?

函数指针的长度取决于编译器和操作系统的实现。在一般情况下,函数指针的长度是根据平台的位数来确定的。在32位系统上,函数指针通常是4字节长,而在64位系统上,函数指针通常是8字节长。

函数指针是指向函数的指针变量,它存储了函数的地址。函数指针的长度与其他指针类型相同,因为它们都是用来存储内存地址的。在大多数情况下,函数指针的长度与数据指针的长度相同。

函数指针的长度决定了它可以存储的地址范围。较长的函数指针可以表示更大范围的地址,因此可以用于访问更大的内存空间。这对于处理大型程序或者需要访问大量内存的应用程序非常重要。

需要注意的是,函数指针的长度可能会受到编译器的优化和对齐规则的影响。某些编译器可能会对函数指针进行优化,使其长度更短。此外,编译器可能会根据特定的平台和操作系统要求对函数指针进行对齐,从而影响其长度。

总结起来,函数指针的长度是根据平台的位数来确定的,一般情况下在32位系统上是4字节长,在64位系统上是8字节长。但具体的长度可能会受到编译器和对齐规则的影响。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

64位平台下,指针自身的大小为什么8字节

为什么指针的大小会作为一个知识点呢?...因为后续内存管理的内容会涉及一些数据结构,这些数据结构使用到了指针,同时存储指针的值需要内存空间的,所以我们需要了解指针的大小,便于我们理解一些设计的意图;其次,这也是困扰我的一个问题,因为有看见64...为了搞清楚这个问题,我们需要了解两个知识点: 存储单元 CPU总线 什么存储单元? ---- 存储单元存储器(本文指内存)的基本单位,每个存储单元8bit,也就是1Byte,如下图所示: ?...就是我们通常所谓的“内存的地址” 也就是指针的值 结论:指针的值就是存储单元的编号。 接着,我们只需要知道这个「编号」的最大值是多少,就可以知道存储「指针」的值所需的大小。...所以:64位平台下,一个指针的大小8字节。 顺便扩充个问题: 为什么32位平台下,可寻址空间4GB?

69310

Go函数指针如何让你的程序变慢的?

需要注意的,在 Go 中本身并没有函数指针的概念,而是称为“函数值”,但是为了能和其他语言进行相应的比较,以及和直接调用的函数相区别,还是称之为“函数指针”。...我们先看一下函数如何返回函数指针的: func MakeAdd() func(int, int) int { return func(a, b int) int { return...rel 0+8 t=1 main.Add+0 可以看出,在 Go 中,函数指针并不直接指向函数所在的地址,而是指向一段数据,这里放着的才是真正的函数地址。 那么为什么 Go 要这么绕呢?...) MOVQ 16(SP), BP 0x002a 00042 (:12) ADDQ $24, SP 0x002e 00046 (:12) RET 看起来和...本文并非反对使用函数指针,只是指出在确实需要进行微观层面的深度优化的时候,函数一个要值得注意的切入点。对于大部分日常代码,从代码的可读性/可维护性选择即可,不需要过于担心。

44240

什么大端序和小端序,为什么要有字节

什么字节字节序,又称端序或尾序(英语中用单词:Endianness 表示),在计算机领域中,指电脑内存中或在数字通信链路中,占用多个字节的数据的字节排列顺序。...在几乎所有的平台上,多字节对象都被存储为连续的字节序列。例如在 Go 语言中,一个类型为int的变量x地址为0x100,那么其指针&x的值为0x100。...在内存中存放整型数值168496141 需要4个字节,这个数值的对应的16进制表示0X0A0B0C0D,这个数值在用大端序和小端序排列时的在内存中的示意图如下: ?...大端序和小端序 为何要有字节序 很多人会问,为什么会有字节序,统一用大端序不行吗?答案,计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。...计算机处理字节序的时候,如果大端字节序,先读到的就是高位字节,后读到的就是低位字节。小端字节序则正好相反。

10.4K10

为什么JVM要用到压缩指针?Java对象要求8字节的整数倍?

前言 前两天在一个帖子中看到一道面试题: 堆内存超过32G时,为什么压缩指针失效?...铺垫这么多,指针的寻址原理奉上 假如我们这里有3个对象A、B、C,他们的大小分别为8、16、8字节为什么假设这几个值,我们先按下不表),并且在内存中连续存储,为更好理解,我们简化为下图: image.png...伏笔回收:Java对象的大小为什么必须8字节的整数倍?...上面的对象A、B、C我们假设的大小8字节、16字节、8字节;共同点你可能发现了,他们都是8字节的倍数,其实Java对象的大小就必须8字节的整数倍,如果没有这个条件,上面说的索引说法也不成立。...听起来好像还不怎么多,但这可是一个对象就少8字节,如果一个大项目,差的可能就不是一星半点了。 所以肯定是开比不开好(JDK1.6的版本后,64位的JVM默认情况下开启指针压缩的。) 冰激凌?

83971

Golang 函数返回类型接口时返回对象的指针还是值

1.接口简介 Interface 一组抽象方法(未具体实现的方法,仅包含方法名参数返回值的方法)的集合,如果实现了 interface 中的所有方法,即该类型就实现了该接口。...接口声明格式: type InterfaceName interface { //方法列表 } 2.函数返回类型接口时返回对象的指针还是值 函数返回类型接口时返回对象的指针还是值,这个要看具体的需要...期望原对象在后续的操作中被修改则返回对象的指针。返回对象的值则返回的对象的副本,对对象副本的修改不会影响原对象。 返回对象的指针示例。...=createEmployeeObj() o.Set() o.Print() e.Print() } 输出结果: company=alibaba company=alibaba 可见函数返回类型接口时返回对象的指针...company="alibaba" e1.Print() } e.Print() } 输出结果: company=alibaba company=tencent 可见函数返回类型接口时返回对象的值

7.9K30

为什么计算机最小的存储单位字节?而最小到的传输单位bit?

数据存储是以“字节”(Byte)为单位,数据传输是以大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),最小一级的信息单位...还可以从以下几个方面来理解: 1.字节(Byte)电脑中表示信息含义的最小单位,因为在通常情况下一个ACSII码就是一个字节的空间来存放。...而事实上电脑中还有比字节更小的单位,因为一个字节由八个二进制位组成的,换一句话说,每个二进制位所占的空间才是电脑中最小的单位,我们把它称为位,也称比特(bit)。由此可见,一个字节等于八个位。...另外,内存中运算的最小存储单位字节,位运算也是在一个字节的存储单位的基础上进行的,所以存储的最小单位可以理解为字节。...所以计算机能传输的最小单位当然你信号的单位bit,而不是字节,串口最小也有一位传递的。

9.1K53

Vue 中 data 为什么必须一个函数

为什么 Vue 中的 data 必须函数? 官方文档的解释如下: ? ? 为什么会出现上述“影响到其它所有实例”的情况呢?...其实这个问题取决于 JS 原型链知识,而非 Vue 我们先来看不是函数的情况: function Component() { } Component.prototype.data = { name...= new Component() componentA.data.age = 40 console.log(componentA, componentB) // 40 14 这就很好的解释了为什么...Vue 组件中的 data 需要用函数了,当 data 函数的时候,每一个实例的 data 属性都是独立的,互不影响 总结 Vue 中的 data 必须函数,因为当 data 函数时,组件实例化的时候这个函数将会被调用...计算机会给这个对象分配一个内存地址,实例化几次就分配几个内存地址,他们的地址都不一样,所以每个组件中的数据不会相互干扰,改变其中一个组件的状态,其它组件不变 简单来说,就是为了保证组件的独立性和可复用性,如果 data 函数的话

1.2K20

为什么x86架构一个字节8个bit

我完全不理解这条评论——如果使用32位字为什么指数必须为8位?为什么不能使用9位或10位?但这是我找到的全部内容,如果你能解答,希望在评论区告诉我。...为什么大型机(mainframes)要使用36位字? 与 6-bit byte 有关的另一个问题:为什么很多大型机使用36位字?...还有人提到,一些具有36位字的机器可以允许用户选择字节大小——根据使用场景可以选择5、6、7或8位一个字节。...1100/2200系列采用36位字(36-bit word size) PDP-8一台 12-bit 机器 我还听到的一些关于使用2的幂作为字节大小很好的理由,但是我还没有完全理解:...保持 byte size 较小的一些原因: 这是很浪费空间的——字节可以寻址的最小单位,如果计算机存储了大量ASCII文本(一个字符仅需要7位),那么每个字符 12 位或 16 位是非常浪费的,而可以使用

25730

为什么说智能指针解决问题的“神器”?

一、为什么需要使用智能指针 (一)内存泄漏 C++在堆上申请内存后,需要手动对内存进行释放。代码的初创者可能会注意内存的释放,但随着代码协作者加入,或者随着代码日趋复杂,很难保证内存都被正确释放。...四、智能指针源码解析 在介绍智能指针源码前,需要明确的,智能指针本身一个栈上分配的对象。根据栈上分配的特性,在离开作用域后,会自动调用其析构方法。...shared_ptr主要有两个成员变量,一个原生指针,一个控制块的指针,用来存储这个原生指针的shared_ptr和weak_ptr的数量。...virtual void __on_zero_shared() _NOEXCEPT = 0; public: // 构造函数,需要注意内部存储的引用计数从0开始,外部看到的引用计数其实为...浅谈Golang两种线程安全的map 公司的电脑为什么卡——因为缺少工程师文化!

92420

机器学习笔记之为什么逻辑回归的损失函数交叉熵

逻辑回归反向传播伪代码; 大家可以思考下能不能回答/推导出,但这次讨论的问题为什么逻辑回归损失函数交叉熵? 初看这个问题感觉很奇怪,但是其中的知识包含了LR的推导与理解。...学习时,采用极大似然估计来估计模型的参数,似然函数为: ? 对数似然函数(采用对数似然函数是因为上述公式的连乘操作易造成下溢)为: ? 对其求最大值,估计参数 ? : ?...再将其改为最小化负的对对数似然函数: ? 如此,就得到了Logistic回归的损失函数,即机器学习中的「二元交叉熵」(Binary crossentropy): ?...简单来说,「KL散度衡量两个概率分布的差异」。 逻辑回归模型最后的计算结果(通过sigmoid或softmax函数各个分类的概率(可以看做各个分类的概率分布)。...那么假设真实的概率分布,估计得到的概率分布, 这两个概率分布的距离如何去衡量?在信息论中,「相对熵」,也就是KL散度可以衡量两个概率分布的差异性。具体公式为: ?

1.1K10

【C++】C++ 引用详解 ③ ( 函数返回值不能 “ 局部变量 “ 的引用或指针 | 函数内的 “ 局部变量 “ 的引用或指针函数返回值无意义 )

一、函数返回值不能 " 局部变量 " 的引用或指针 1、引用通常做右值 之前使用 引用 时 , 都是作为 右值 使用 , 引用只在 声明 的 同时 进行初始化时 , 才作为左值 , // 定义变量 a...2、函数返回值特点 函数 的 返回值 几乎很少 引用 或 指针 ; 函数 的 计算结果 经常是借用 参数中的 地址 / 引用 进行返回的 , 函数 的 返回值 一般返回一个 int 类型的值 , 如果...如果 想要 在 函数中 , 返回 引用 / 指针 , 函数局部变量的 引用 / 指针 返回不出来的 , 即使强行返回 引用 / 指针 , 也是当前 局部变量 被 分配的 栈内存 地址 , 该函数 执行完毕后..." 引用或指针函数返回值测试 ---- 下面的 int& getNum2() 函数 , 返回一个引用 , 该 引用 局部变量 的引用 ; 下面的 int* getNum3() 函数 , 返回一个指针..., 该 指针 局部变量 的指针 ; 上述两个函数无意义的 , 获取到 函数 返回的 " 局部变量 " 的 引用 或 指针 , 然后获取地址 , 发现获取的都是随机值 , 都是无意义的值 ; num21

30320
领券