问题标签 [sizeof]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
16 回答
476620 浏览

c - 如何找到“sizeof”(指向数组的指针)?

首先,这里有一些代码:

有没有办法找出ptr指向的数组的大小(而不是仅仅给出它的大小,在 32 位系统上是四个字节)?

0 投票
6 回答
9210 浏览

c++ - 从 C++ 结构字段中获取单个字段的大小

简短的版本是:如何学习 c++ 字段的单个字段的大小(以位为单位)?

为了澄清,我正在谈论的领域的一个例子:

要获得整个 Test 对象的大小很容易,我们只是说

我们可以通过

我想知道如何获取单个字段的大小,例如 Test::field4。上面的普通结构成员示例不起作用。有任何想法吗?或者有人知道它不能工作的原因吗?我相当确信 sizeof 不会有帮助,因为它只返回以字节为单位的大小,但如果有人知道否则我会全神贯注。

谢谢!

0 投票
4 回答
2112 浏览

c++ - 关于sizeof和类成员函数的问题

如果我创建 B 的对象,使用

fn() 的内存在哪里?

对象中是否有指向 fn() 的内存位置的指针?

如果是,为什么 sizeof(B) 返回值,就好像对象中根本没有指针一样?

0 投票
7 回答
35233 浏览

c# - x64 上的 sizeof(int)?

当我sizeof(int)在我的 C#.NET 项目中执行此操作时,我得到的返回值为 4。我将项目类型设置为 x64,那么为什么它说 4 而不是 8?这是因为我正在运行托管代码吗?

0 投票
8 回答
15002 浏览

c++ - c++中sizeof运算符是如何实现的?

有人可以指出 C++ 中 sizeof 运算符的实现以及有关其实现的一些描述。

sizeof 是不能重载的运算符之一。

所以这意味着我们不能改变它的默认行为?

0 投票
2 回答
3902 浏览

delphi - 对象的字节大小,包括成员的大小

我想知道(用于调试和记录)对象的大小(以字节为单位),但不喜欢

但就像一个“深尺寸”。例如,如果对象包含哈希映射或列表,则该哈希映射或列表所需的实际大小应添加到结果中。有什么方法可以做到这一点而不必添加

对每一个小物件?

可能是一个愚蠢的问题,但我会试一试;)

编辑:刚刚发现几乎相同的问题:

Delphi中的递归类实例大小

我想,这个问题可以结束了。对于那个很抱歉!

0 投票
9 回答
1998 浏览

c++ - sizeof(*this) 给出错误值

我有一个类,C。C有一个成员变量声明为:bool markerStart;

在 C 中,对 sizeof(*this) 的调用会给出 0x216 字节的值。

在 C 的其他地方,我这样做:markerStart = false;

这个调用实际上不是将 markerStart 设置为 false,而是破坏了内存中下一个类的开始!

查看反汇编代码,我发现:

第二个移动指令将这个 + 0x218 处的一个字节设置为零,但由于该类只有 0x216 个字节长,这是破坏内存!

回应评论,肯定是markerStart = false 指令。我可以在反汇编视图和内存视图中看到它发生的情况(并使用 Windbg,通过使用数据断点)。下一个类的第一个字节被设置为零,这弄乱了它的 vftbl 指针。

注意:获取 markerStart 的地址并从中减去,得到 0x211!

谁能告诉我从哪里开始寻找解决这个问题的线索?

更新:感谢所有帮助。没有代码,你们中的任何人都几乎不可能解决问题。我正在寻找的是关于从哪里开始寻找的提示。你们中的大多数人都提供了很好的提示,所以谢谢!

我终于找到了问题所在。在这种情况下,对齐已经设置在一个类中,并且在关键代码块之后没有正确重置。对齐错误的类恰好在 C 类声明之前被编译——因此这就是问题出现的地方。

0 投票
3 回答
2412 浏览

c# - P/Invoke 帮助期间的 AccessViolationException

从外部 DLL 调用以下内容时,我不断收到 AccessViolationException:

其中有一个我这样设置的原型:

现在,导致这种情况的参数很可能是第 5 个参数(IntPtr pMapping)。我已将此代码从 C++ 应用程序移植到 C#。上面的第 5 个参数是一个指向一个结构的指针,它还包含一个指向另一个结构的指针。以下是我如何设置这些结构:

这些的 C++ 等价物如下:

我觉得我在移植这些结构或移植函数原型时做错了。某种编组问题。

这篇文章顶部的函数在我的代码中被调用了两次。一旦 pMapping 设置为 null(这会将一个值放入“大小”中)。然后使用此大小参数为新结构分配内存,并且现在使用指向此分配内存空间的指针再次调用该函数以进行 pMapping。(pMapping 还有一个指向另一个结构的指针,该结构在此期间也分配了一些空间)。

这是完成此操作的旧 c++ 代码:

我最初认为我没有分配正确的空间量,所以我尝试了上面的旧 C++ 代码并发现:

我在我的 C# 代码中进行了相同的检查,发现以下内容:

我们这里有问题。Mapping 结构的大小应该是 272,但它只有 16。我想我可以做一个快速修复,我在这里手动分配了 272 而不是 16,但它仍然出错,并出现 AccessViolationException。

关于如何解决这个问题的任何想法?或者还有什么问题?

0 投票
10 回答
9790 浏览

c - C:为什么 size_t 不是 C 关键字?

sizeof是一个 C关键字。它以名为 的类型返回大小size_t。但是,size_t不是关键字,而是主要在stddef.h可能还有其他 C 标准头文件中定义。

考虑一个场景,您想要创建一个包含任何 C 标准头文件或库的 C 程序。(例如,如果您正在创建 OS 内核。)现在,在这样的代码中,sizeof可以使用(它是 C 关键字,因此它是语言的一部分),但它返回的类型 ( size_t) 不是可用的!

这不是表示 C 标准规范中存在某种问题吗?你能澄清一下吗?

0 投票
8 回答
73302 浏览

c++ - C/C++ 中联合的大小

C/C++ 中联合的大小是多少?它是里面最大数据类型的大小吗?如果是这样,如果联合的较小数据类型之一处于活动状态,编译器如何计算如何移动堆栈指针?