2017-02-05 137 views
0

范围内有多少值/空间可以在一个指针分配。有没有办法找到可能的总分配数量。什么是指针存储在c

+0

原则之间,也就是说,两个'在对象的对象表示char'指针的差异必须是'ptrdiff_t'表示的,所以,给你一个上限。但这可能不是现代系统的现实界限。 –

+0

你问一个变量可以多少内存持有?或一般有多少内存? – user2896976

+0

是的,因为它取决于配置。有什么方法可以计算出来吗? – BhaveshSGupta

回答

2

据我所知,在C中只保留了NULL值(“零”,但不一定是全零位),所以指针类型的数字空间值的其余部分都是有效的指针地址,尽可能C语言是担心,但在特定平台上然后许多附加的规则适用,这将降低可用存储空间(如存储器映射的IO,例如)。 (请注意,我假设你正在谈论的是一个平坦的内存空间,就像我们用真正的32位编程一样,而不是像16位编程的日子那样,你的指针和指针都是nearfar以及各种内存黑客)。

扩大对我的“特定平台”的说明,在32位Windows the user-process address space is 2 GiB0x0000000x7FFFFFFF),而不是4GiB因为在Windows 32位指针的高位被保留(除非你指定IMAGE_FILE_LARGE_ADDRESS_AWARE标志)。关于分配的总数:(例如,你可以分配一个字节缓冲区多少次)然后这取决于分配器的实现和父操作系统,因为每个分配都有空间开销(有很多不同的方法来实现一个alocator,具有不同的结构和算法),所以我不能作一般性说明。

+0

其他细节需要注意的是任何非字符类型(甚至一些字符类型)填充和对齐要求。 – Sebivor