草庐IT

memory-alignment

全部标签

c++ - 当 GCC 明确表示会减慢程序速度时,为什么要在 O2/O3 处启用优化?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。Improvethisquestion引自https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html:-falign-labels-falign-labels=nAlignallbranchtargetstoapower-of-twoboundary,skippinguptonbyteslike-falign-functions.Thisoptioncaneasilymak

c++ - `std::memory_order_acquire` 的语义是否需要 x86/x86_64 上的处理器指令?

众所周知,在x86上,操作load()和store()内存屏障memory_order_consume,memory_order_acquire,memory_order_release,memory_order_acq_rel不需要缓存和流水线的处理器指令,汇编代码始终对应于std::memory_order_relaxed,这些限制仅对编译器的优化是必要的:http://www.stdthread.co.uk/forum/index.php?topic=72.0这段反汇编代码为store()(MSVS2012x86_64)确认了这一点:std::atomica;a.store(0,

c++ - 为什么 std::aligned_storage 的分配总是有一个偏移量?

分配std::aligned_storage::type时在堆上,我总是得到一个偏移16个字节的指针(在x64上;在x86上它偏移8个字节)。换句话说,这:#include#includeintmain(){typedefstd::aligned_storage::typeMemPage;MemPage*p_mp=newMemPage;std::cout给我(例如)0x72f010尽管我希望最后三位数字全部为零。分配std::aligned_storage::type时在堆栈上,一切都按预期工作。我在ubuntu14.04上使用gcc-4.8.2x86_64。

c++ - 这种尺寸对齐是如何工作的

关于所提供的评论,我无法理解以下代码。此代码的作用是什么?8-aligned的等效代码是什么?/*segmentsizemustbe4-aligned*/attr->options.ssize&=~3;这里,ssize是unsignedint类型。 最佳答案 由于4在二进制中是100,因此任何与4字节边界对齐的值(即4的倍数)都会将最后两位设置为零。3在二进制中是11,~3是这些位的按位取反,即...1111100。对该值执行按位与将使每一位保持相同,除了最后两个将被清除(位&1==位,位&0==0)。这为我们提供了下一个较低或相等

c++ - 虚拟内存耗尽 : Cannot allocate memory

我在ubuntu12.10上编译失败,可用内存为300mb(总计750mb,MySQL为350mb),1.5ghz,我正在尝试将wt的基本helloworld文件重新加工成一个简单的ajax页面。我很确定这根本不是内存问题,因为我能够使用g++-O3-ohellohello.C-lwtfcgi-lwt-lboost_signals编译原始的hello.C文件。.自从我撕掉了HelloApplication::HelloApplication(constWEnvironment&env):WApplication(env)的内脏后,我确定我搞砸了C++并放入Wt::Json示例中的示例H

c++ - 编译器找不到 "aligned_alloc"函数

尝试获得一个可移植的函数以在具有对齐特征的堆上进行分配。找到“aligned_alloc”,我认为它在stdlib.h中,但gcc似乎不这么认为error:'aligned_alloc'wasnotdeclaredinthisscope使用带有标志-std=c++11-m64的gcc尝试导入#include#include 最佳答案 aligned_alloc在C11中定义。它(还)没有为C++定义,尽管它可能会出现在C++17中。(也就是说,它不在标准C库中预期在标准C++库中可用的(当前)209个函数列表中。请参阅C++标准的附

c++ - C++ 中容器内过度对齐的结构和枚举之间的差异

在C++中,至少在GCC和Clang上,嵌入在容器中的过度对齐类型(std::vector)似乎根据类型是过度对齐的结构还是过度对齐的枚举而被区别对待.对于结构版本,每个元素都对齐,而对于枚举版本,只有整个缓冲区具有指定的对齐方式。标准是否指定了此行为?如果是这样,哪一部分提到了它?还是实现定义的,不应依赖?考虑以下几点:#include#include#includestructalignas(16)byte_struct{std::uint8_tvalue;};enumalignas(16)byte_enum:std::uint8_t{};intmain(){{//withstru

c++ - 等价于 C 中的 std::aligned_storage<>?

在C语言中,有没有一种方法可以使堆栈上的存储过度对齐(即比从类型系统推断出的对齐更多)?对于动态分配的内存中的变量,如果所有其他方法都失败了,我们总是可以手动对齐,但是对于自动分配的内存中的变量可以做什么呢?我想可以使用char[size+alignment-1]然后总是使用位操作来访问变量,但这似乎比必要的“有点”暗淡(harharhar;)). 最佳答案 在C2011中,有_Alignas和_Alignof关键字,标题这使得它们的使用稍微不那么难看,类型max_align_t(在中)。例如,你可以写double_Alignas(

c++ - std::align 和 std::aligned_storage 用于内存块的对齐分配

我正在尝试分配一个大小为size的内存块,它需要Alignment对齐,而在编译时可能未定义大小。我知道存在_aligned_alloc、posix_memalign、_mm_alloc等例程,但我不想使用它们,因为它们会降低代码的可移植性。C++11提供了一个例程std::align和一个类std::aligned_storage,我可以从中检索POD类型进行分配一个将符合我的要求的元素。然而,我的目标是创建一个分配器,它将分配一个size大小的内存块(不仅仅是单个元素),该内存块将被对齐。这可能使用std::align吗?我问的原因是因为std::align移动指针,使用该指针的类

Unity 内存性能分析器 (Memory Profiler)

一、安装安装有两种方式一:addpackage:com.unity.memoryprofiler方式二:FromPackages:UnityRegistry搜索MemoryProfiler二、使用打开:Windows->Analysis->MemoryProfiler打开MemoryProfiler界面,可以链接真机检测,也可以在Editor检测。点击Capture保存当下帧的内容。Capture完毕之后,会保存本地一个镜像:*.snap文件点击Snap会显示对应帧的详细信息三、单帧检测单帧检测,一般去看工程内的资源,去检查占用内存特别大的游戏对象。在TreeMap界面进行检查,这里已经分好类