问题标签 [size-t]

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 投票
1 回答
808 浏览

c++ - size_t 的点

可能重复:
unsigned int 与 size_t

当我需要存储某些东西的大小(通常是用 分配的东西new)时,我总是将它存储在unsigned int. 然而,浏览一些代码,我看到了size_t使用。据此,几乎很少使用。

  • size_tC++的意义何在?
  • 为什么那些使用它的少数函数不直接使用 anunsigned int呢?
  • 它应该如何在新代码中使用?
0 投票
7 回答
16732 浏览

c++ - 将 size_t 转换为整数 (c++)

我一直在尝试制作一个 for 循环,它将根据网络数据包的长度进行迭代。在 API 中,通过 event.packet->dataLength 存在一个变量 (size_t)。我想从 0 迭代到 event.packet->dataLength - 7 每次迭代时将 i 增加 10,但我遇到了麻烦。

我寻找解决方案,但找不到任何有用的东西。我尝试将 size_t 转换为 unsigned int 并用它进行算术运算,但不幸的是它不起作用。基本上我想要的是这个:

尽管每次我做这样的事情或尝试转换时, i < # 部分都是一个巨大的数字。他们在 API 教程中给出了 printf 语句,该语句使用“%u”打印实际数字,但是当我将其转换为无符号整数时,它仍然不正确。我不知道从这里去哪里。任何帮助将不胜感激 :)

0 投票
5 回答
3108 浏览

c++ - 将 size_t 作为参数传递的“效率”

由于size_t根据当前系统可以是 32 位或 64 位,最好总是将 size_t 作为引用或 const 引用传递给函数,因此它总是 4 个字节?(如果它是 8 个字节,则必须复制)我看过的许多开源代码都不会这样做,但是如果他们的编译器支持 64 位整数,那么这些 64 位整数总是作为引用传递。他们为什么不为 size_t 这样做?我想知道你的意见是什么。

0 投票
5 回答
16294 浏览

c++ - 我应该为 size_t 包含 stddef.h 还是 cstddef

当我想size_t在 C++ 中使用时,我应该包含<stddef.h>or<cstddef>吗?我听几个人说这<cstddef>是一个坏主意,应该被弃用。这是为什么?

0 投票
3 回答
63463 浏览

c - C:将 int 转换为 size_t

在 32 位和 64 位 linux 平台上在 C99中转换/转换int为 a的正确方法是什么?size_t

例子:

0 投票
5 回答
21321 浏览

c++ - size_t 到 unsigned int(来自 API 函数)

我正在使用 Oracle API 访问数据库,并且该 API 具有readBuffer(char * buffer, unsigned int size);我无法对其进行任何更改的功能。

我有一个使用此 API 的类,并且我的函数的签名当前采用 astd::string和 anunsigned int作为大小,问题是当我传递std::string.size()给函数的 size 参数时,我从编译器收到警告,表明从size_tto转换unsigned int可以导致数据丢失。

我想知道是否有一种有效的方法可以将 转换size_t为 anunsigned int以便我可以将其传递给我的 API 而不会从编译器收到警告?

我了解 size_t 的目的,并且在谷歌上搜索这种转换会出现很多结果,上面写着“更改函数以采用 size_t arg”,但在这种情况下我不能更改我的 API 的签名。

有什么建议么?

0 投票
3 回答
35579 浏览

c++ - size_t 和 std::size_t 之间的区别

它们在声明的位置、应在何时使用以及任何其他区别特征之间有什么size_t区别?std::size_t

0 投票
5 回答
6927 浏览

c - 为什么 size_t 当 int 足以满足数组的大小时?

C 标准保证 anint能够存储每个可能的数组大小。至少,这就是我通过阅读第 6.5.2.1 节第 1 小节(数组下标约束)所理解的:

其中一个表达式应具有类型“指向对象类型的指针”,另一个表达式应具有整数类型,并且结果具有类型“类型”。

既然我们要用ints 作为数组下标,为什么要用 ssize_t来确定数组的大小呢?

为什么strlen()返回size_t什么时候int就足够了?

0 投票
3 回答
702 浏览

c++ - 分配大量内存和使用size_t?

在我的应用程序中,我正在分配内存来存储从位图图像堆栈中读取的“体积数据”。

我将数据存储在“无符号字符”中,并且在分配期间,首先我尝试为整个数据分配连续的内存块。如果失败,然后尝试分散分配。(每个图像一个小内存块)。

这是我分配内存的方法,我用“tryContinuseBlock = true”调用。

我希望这段代码可以在 32 位和 64 位平台上运行。

现在的问题是,即使在 64Bit 环境(具有 12Gb 内存)中,当我加载 (1896*1816*1253) 大小的数据(bbpsize=1)时, helper_allocContinouseVolume()方法也会失败。这是因为,我使用“int”数据类型进行内存地址访问,“int”的最大值为 4294967295。

在 32 位和 64 位环境中,以下代码给出了值“19282112”。

其中正确的值应该是“4314249408”。

那么我应该使用哪种数据类型呢?我想在 32 位和 64 位环境中使用相同的代码。

0 投票
3 回答
6937 浏览

c++ - 在 C++ 中从 size_t 转换/转换为 uint8_t?

我正在尝试编写一些代码,使用 boost::asio 的套接字将消息从一端(客户端)发送到另一端(服务器)。

我现在的具体目标是在发送的每条消息前加上一个 1 字节的无符号整数 (uint8_t),告诉接收者消息的其余部分有多少字节长。

请注意,我将大小存储和传输为 uint8_t 而不是 size_t 的原因是因为我想确保它在两台机器上都是 1 个字节。一点谷歌搜索表明 size_t 在机器 A 和机器 B 上的大小可能不同,这可能会搞砸。

所以在这里我正在计算消息的长度。该消息仅由两部分组成:一个 uint16_t,后跟一个变量“data”,它是一个 (void*)-cast 的内存块,可用于不同的目的(目标机器有解释该数据的方法,但我不会不要在这里讨论)。

在这个例子中,sizeof(data) == 4,所以 sizeOfMessage 应该等于 6(因为 uint16_t 是一个 2 字节整数)。但是,如果我 std::cout << sizeOfMessage,则显示的不是 6,而是一个特殊字符:黑桃(如纸牌套装)。查看 VS2010 调试器中的数据,它显示为6 '-'。但是,如果我将 sizeOfMessage 定义为 size_t 并将其打印出来,一切都很好(但当然,我不能通过网络发送它,因为不能保证从一台机器到下一台机器的 size_t 的字节大小)。

我认为这意味着在算术之后如何将 size_t 转换为 uint8_t 出现问题。 sizeof返回一个 size_t,所以我的代码正在做的是添加两个 size_t,然后将其转换为 uint8_t。

我的结论是否正确,即该值未正确转换?如果是这样,我该如何解决这个问题?

提前致谢。