出于某种原因,一个int在我的ram上的重量超过了32位
An int weighs more then 32 bits on my ram for some reason
好的,所以我很想看看int在我的ram上是否真的有4个字节的权重
所以我用这个代码做了1000000 int。
for(int i = 0;i < 1000000;++i)
int *as= new int;
在执行这行代码之前,我在前面放了一个断点,看看我从多大程度上开始
我的程序从750kb开始,几乎没有任何溢出现象。
但在我完成循环后,程序使用32000kb,而如果int的重量为32位,则它的上限为4000kb
另一件值得一提的事情是,我正在使用ctrl+altk+delete方法来检查我的程序从ram占用了多少空间,并且我正在visual c++2010 express上运行它。
我也确信我电脑上的int是32位而不是64位,这无论如何都不重要,因为即使它是64位而不是32位,它也应该是8000 kb而不是32000 kb
所以也许你可以试着在你的电脑上做这件事,并告诉我你是否有同样的结果。
如果你知道我哪里错了,请告诉我。
4字节的内存块太小,不值得管理。提供共享缓存行的可能不相关的代码对象块也可能会带来性能损失。
典型的存储器管理器具有介于16和256字节之间的最小块大小。此外,通常需要一些开销来跟踪已经分配了特定大小的块的事实。
内存管理器有一些开销来跟踪不同的块。它们还可以分配额外的位来帮助发现缓冲区溢出。有些具有他们将分配的最小大小块。
堆分配会带来一些开销,因为堆管理器提供的每个内存块都有一些额外的信息(例如大小)。
此外,通常堆管理器不提供这么小的块,因为几乎没有人从堆中请求单个int
(除其他外,上述额外的bookkepping使这么小的分配成为一个坏主意);因此,您获得的每个int
可能是堆管理的最小内存块,比int
大几倍。
您在堆上而不是堆栈上分配整数指针。
我看到每个int分配了4个字节(32位),但每个指针和内存分配的分配开销也有8个字节(64位)。
- 将应用程序从32位移植到64位时出现问题
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 浮点数为 32 位和 64 位二进制表示形式
- C++易失性:保证 32 位访问?
- C++将 16 位值转换为 32 位值
- 如何在 64 位平台上计算 32 位哈希C++?
- C++中的24位到32位转换
- 在机器字大小等于 32 位的计算机上int64_t如何工作?
- uint32_t如何保证 32 位?
- 使用 std::istream_iterator 时,它似乎跳过了空文件行 - 如果可能的话,如何避免这种情况?
- 如果在创建对象时创建了 VPTR,那么为什么具有虚拟功能的类的大小在 32 位系统上为 4,在 64 位机器上为 8
- 尝试从另一个过程读取32位整数时,ReadProcessMemory崩溃了
- 我如何制作一点掩码,只掩盖了32位的某些零件(索引)
- 出于某种原因,一个int在我的ram上的重量超过了32位
- 将浮点数 32 位变量类型转换为无符号整数 32 位时进行了哪些位级更改
- 使用CMake构建32位CGAL:即使指定了32位,也会生成64位二进制文件
- "0xffffffff00000000"是否表明 32 位和 64 位编译之间混淆了?
- Crashlytics Fabric错误地处理了从32位平台上的swift ios调用的throw std::异常