标签: size-t

size_t仅适用于C++标准或C标准吗?

size_t仅适用于C++标准或C标准吗?

我在"/ usr/include"树中找不到定义size_t的C头.

如果它不在C标准中,那么GCC是否正在做一些神奇的工作?

谢谢,陈兹

c c++ size-t

3
推荐指数
1
解决办法
1478
查看次数

使用size_t声明最大的数组

我想声明一个非常大的数组.我发现数组的最大大小是size_t,定义为UINT_MAX

所以我写了这样的代码

int arr[UINT_MAX];
Run Code Online (Sandbox Code Playgroud)

当我编译它时,它表示数组维度溢出

但是当我写这样的时候

size_t s = UINT_MAX;
int arr[s]; 
Run Code Online (Sandbox Code Playgroud)

它编译得当.有什么不同

c++ arrays size-t

3
推荐指数
1
解决办法
6846
查看次数

传递size_t作为参数的"效率"

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

c++ size-t

3
推荐指数
2
解决办法
2120
查看次数

C中size_t类型的malloc参数的限制是什么?Docs说它有UINT_MAX的上限但我不能超越INT_MAX

我想分配一个2.9GB的char数组

  database = (char*) malloc((2900 * 1000000 * sizeof(char)));
Run Code Online (Sandbox Code Playgroud)

这给出了整数溢出警告和malloc返回NULL.的 malloc参数的类型的size_t根据文档其是类型的 unsigned int.

所以最大应该UINT_MAX是至少2.9GB.但是,如果我尝试分配超过MAX_INTmalloc失败.这是否意味着 size_t我的系统是int类型?我该如何检查?我看了看

/usr/include/stdlib.h 
Run Code Online (Sandbox Code Playgroud)

./lib/gcc/x86_64-redhat-linux/4.1.1/include/stddef.h 
Run Code Online (Sandbox Code Playgroud)

但找不到定义size_t.非常感谢

c malloc size-t limit

3
推荐指数
2
解决办法
1万
查看次数

什么是"目标平台上最大可能对象的大小",以size_t表示

我正在阅读size_tC/C++中的文章http://web.archive.org/web/20081006073410/http://www.embedded.com/columns/programmingpointers/200900195(通过Stackoverflow找到的链接).

从文章引用:

类型size_t是一个typedef,它是某些无符号整数类型的别名,通常是unsigned int或unsigned long,但可能是unsigned long long.每个标准C实现都应该选择足够大的无符号整数 - 但不要大于需要 - 来表示目标平台上最大可能对象的大小.

如何确定机器上最大可能对象的大小?

什么影响最大对象的大小(除了处理器)?

欢迎详细解释链接.

c c++ cpu size-t size-type

3
推荐指数
1
解决办法
223
查看次数

当size_t溢出时,"<"和">"运算符是否正常工作?

我正在研究一个更新20年代码的项目,其中许多问题都与整数溢出有关.我想确保我正确测试溢出,所以我写了一个测试程序.它的输出让我感到沮丧.这里是:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>

int main (void) {

   size_t largerNum,Num;

   largerNum = 12;
   Num = UINT_MAX;

   printf("largerNum = %u\nNum = %u\nNum + 1 = %u\n", largerNum    , Num, Num + 1);

   largerNum = Num + 1;

   printf("largerNum now = %u\n", largerNum);

   if(largerNum < Num ){
      printf("largerNum overflowed to %u\n", largerNum);
   }
   else {
      printf("largerNum did not overflow: %u\n", largerNum);
   }

   printf("Is (0 < UINT_MAX)?\n");

   (0 < UINT_MAX)?printf("YES\n"):printf("NO\n");

   printf("Is (largerNum < Num)?\n");

   (largerNum < Num)?printf("YES\n"):printf("NO\n");

   return …
Run Code Online (Sandbox Code Playgroud)

c printf overflow size-t operator-keyword

3
推荐指数
1
解决办法
105
查看次数

是否保证size_t,vector :: size_type等typedef不会绑定到char类型?

cstdinttypedef 肯定可以绑定到char变量.例如,它很可能uint_least8_t与之结合unsigned charint_least8_t结合signed char.

标准是否保证类似的东西不会发生size_t或类似的类型?或者至少有一个纯理论上的机会,这些类型将绑定到某些字符类型,unsigned char甚至可能wchar_t

c++ size-t char

3
推荐指数
1
解决办法
177
查看次数

使用int而不是size_t索引来访问向量元素的性能降低了吗?

如果我使用intindex来访问vector元素,它会将整数转换为size_t,然后调用operator[](size_t)函数吗?是否有任何性能下降?

c++ int vector size-t

3
推荐指数
1
解决办法
611
查看次数

为什么write()返回ssize_t但是接受size_t的参数?

编译调用的代码时收到警告 write()

warning: comparison between signed and unsigned integer expressions [-Wsign-compare]

这是write()的定义:

ssize_t write(int fd, const void *buf, size_t count);

RETURN VALUE
   On success, the number of bytes written is returned  (zero  indicates
   nothing  was  written).   On  error, -1 is returned, and errno is set
   appropriately.
Run Code Online (Sandbox Code Playgroud)

这对我来说很奇怪.假设ssize_t是int,我最终写了一些大的(> 2GB).我不能只使用write()vs count的返回值的比较,可以吗?

(编辑:也许我应该正确地写下我的问题:在没有得到警告的情况下使用write()的正确方法是什么,也不会遇到符号转换后计数== -1的情况?是的,我知道它是未定义的行为)

c size-t

3
推荐指数
1
解决办法
552
查看次数

为了迭代数组我们应该使用size_t还是ptrdiff_t?

在这篇由Andrey Karpov撰写的题为"关于size_tptrdiff_t"的博客文章中,他展示了一个例子,

for (ptrdiff_t i = 0; i < n; i++)
  a[i] = 0;
Run Code Online (Sandbox Code Playgroud)

但是,我不确定这是否正确,似乎应该如此

for (size_t i = 0; i < n; i++)
  a[i] = 0;
Run Code Online (Sandbox Code Playgroud)

它是否正确?

我知道我们也应该使用类似的东西memset,但让我们完全避免这种情况.我只问这种类型

c pointers size-t errata ptrdiff-t

3
推荐指数
1
解决办法
787
查看次数

标签 统计

size-t ×10

c ×6

c++ ×6

arrays ×1

char ×1

cpu ×1

errata ×1

int ×1

limit ×1

malloc ×1

operator-keyword ×1

overflow ×1

pointers ×1

printf ×1

ptrdiff-t ×1

size-type ×1

vector ×1