当前位置: 首页 > 知识库问答 >
问题:

使用小数据类型是否会减少内存使用(因为内存分配而不是效率)?

空谦
2023-03-14

实际上,我的问题和这个问题非常相似,但这篇文章只关注C#。最近我读到一篇文章,说java会将一些短类型(如short)提升到内存中的4字节,即使有些位不被使用,所以它不能减少使用。(是真的吗?)

所以我的问题是语言,特别是C、C++和java(正如Manish在这篇文章中谈到java时所说),如何处理小型数据类型的内存分配。参考资料或任何方法来找出它是首选的。谢谢

共有1个答案

濮阳研
2023-03-14

C/C++只使用指定的内存量,但将数据(默认情况下)与某个值的倍数的地址对齐,对于32位应用程序通常为4字节,对于64位应用程序通常为8字节。

因此,例如,如果数据在4或8字节的边界上对齐,那么“char”只使用一个字节。5个字符的数组将使用5个字节。但是,在5字节字符数组之后分配的数据项被放置在跳过3字节以保持正确对齐的地址上。

这是为了在大多数处理器上的性能。通常有像“pack”和“align”这样的实用词可以用来改变或禁用对齐方式。

 类似资料:
  • 问题内容: 我正在编写独立于操作系统的无锁队列,到目前为止,它工作得很好,但是内存管理方面的问题很小。我不确定它的gcc问题还是我的。问题:将元素添加到列表时,内存增加,但是从列表中删除元素(free(elementPointer);)时,内存使用率没有变化。 但是,当我使用pthreads时,N个生产者和M个消费者的 内存使用量始终约为10mb(当尝试添加和删除〜10kk元素时),因此看起来自由

  • 在android应用程序中使用Glide v4。用例是有一个活动在backback中有几个片段。每个片段将从远程加载一到不到十个图像。 具有用于将图像加载到ImageView的kotlin扩展: 片段中的典型调用如下: 问题是,每当看到一个片段并将其添加到Backback时,探查器中的图形内存就会增加50 mg。除了片段中的图像之外,没有太多其他数据。如果注释掉,加载的图像似乎减少了很多。 不确定

  • 问题内容: 为什么行得通? 而这不是吗? 我在带有MS VS 2008的Win XP上尝试了这两个程序,均已编译且没有错误,并且第一个程序运行无任何错误。第二个弹出一些错误窗口,但是我不记得它并且无法复制(此刻无法访问Windows)。 我还在具有g ++的Linux(Kubuntu 10.10,预编译的内核软件包版本2.6.35.23.25)上进行了尝试,并且可以编译并运行而没有任何错误。 为什

  • 我想了解为什么多次动态分配调用的数据比直接在代码中指定的或通过的单个调用分配的数据使用如此多的内存。 例如,我用C编写了以下两个代码: 测试1.c:int x用malloc分配 我在这里没有使用free来保持简单。当程序等待交互时,我查看另一个终端中的顶级功能,它向我显示了以下内容: test2. c: int x不是动态分配的 顶部显示: 我还编写了第三个代码,其结果与test2相同,我在tes

  • 问题内容: 我将Selenium和Firefox Webdriver与python配合使用,以从网站中抓取数据。 但是在代码中,我需要访问该网站超过10k次,并且这样做要消耗大量RAM。 通常,当脚本访问该站点2500次时,它已经消耗了4GB或更多的RAM,并且停止工作。 是否可以在不关闭浏览器会话的情况下减少内存RAM的消耗? 我问这是因为,当我启动脚本时,需要手动登录该站点(两因素加成,下面未

  • 我正在我的google kubernetes引擎上设置一个pod say test-pod。当我部署pod并使用google控制台查看工作负载时,我能够看到默认分配给我的pod,但我无法看到我的pod消耗了多少内存。内存请求部分总是显示在那里。我知道我们可以在部署YAML中限制内存限制和初始分配。但是我想知道当没有通过YAML指定值时,pod会分配多少默认内存,它可以使用的最大限制是多少?