问题标签 [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.
c - 如何找到“sizeof”(指向数组的指针)?
首先,这里有一些代码:
有没有办法找出ptr
指向的数组的大小(而不是仅仅给出它的大小,在 32 位系统上是四个字节)?
c++ - 从 C++ 结构字段中获取单个字段的大小
简短的版本是:如何学习 c++ 字段的单个字段的大小(以位为单位)?
为了澄清,我正在谈论的领域的一个例子:
要获得整个 Test 对象的大小很容易,我们只是说
我们可以通过
我想知道如何获取单个字段的大小,例如 Test::field4。上面的普通结构成员示例不起作用。有任何想法吗?或者有人知道它不能工作的原因吗?我相当确信 sizeof 不会有帮助,因为它只返回以字节为单位的大小,但如果有人知道否则我会全神贯注。
谢谢!
c++ - 关于sizeof和类成员函数的问题
如果我创建 B 的对象,使用
fn() 的内存在哪里?
对象中是否有指向 fn() 的内存位置的指针?
如果是,为什么 sizeof(B) 返回值,就好像对象中根本没有指针一样?
c# - x64 上的 sizeof(int)?
当我sizeof(int)
在我的 C#.NET 项目中执行此操作时,我得到的返回值为 4。我将项目类型设置为 x64,那么为什么它说 4 而不是 8?这是因为我正在运行托管代码吗?
c++ - c++中sizeof运算符是如何实现的?
有人可以指出 C++ 中 sizeof 运算符的实现以及有关其实现的一些描述。
sizeof 是不能重载的运算符之一。
所以这意味着我们不能改变它的默认行为?
delphi - 对象的字节大小,包括成员的大小
我想知道(用于调试和记录)对象的大小(以字节为单位),但不喜欢
但就像一个“深尺寸”。例如,如果对象包含哈希映射或列表,则该哈希映射或列表所需的实际大小应添加到结果中。有什么方法可以做到这一点而不必添加
对每一个小物件?
可能是一个愚蠢的问题,但我会试一试;)
编辑:刚刚发现几乎相同的问题:
我想,这个问题可以结束了。对于那个很抱歉!
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 类声明之前被编译——因此这就是问题出现的地方。
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。
关于如何解决这个问题的任何想法?或者还有什么问题?
c - C:为什么 size_t 不是 C 关键字?
sizeof
是一个 C关键字。它以名为 的类型返回大小size_t
。但是,size_t
不是关键字,而是主要在stddef.h
可能还有其他 C 标准头文件中定义。
考虑一个场景,您想要创建一个不包含任何 C 标准头文件或库的 C 程序。(例如,如果您正在创建 OS 内核。)现在,在这样的代码中,sizeof
可以使用(它是 C 关键字,因此它是语言的一部分),但它返回的类型 ( size_t
) 不是可用的!
这不是表示 C 标准规范中存在某种问题吗?你能澄清一下吗?
c++ - C/C++ 中联合的大小
C/C++ 中联合的大小是多少?它是里面最大数据类型的大小吗?如果是这样,如果联合的较小数据类型之一处于活动状态,编译器如何计算如何移动堆栈指针?