草庐IT

ASSEMBLY

全部标签

memory - 有关可执行程序(进程)的内存布局的更多信息

我参加了三星的面试。他们问了很多关于程序内存布局的问题。我对此几乎一无所知。我用谷歌搜索了“可执行程序的内存布局”。“进程的内存布局”。我很惊讶地发现关于这些主题的信息并不多。大多数结果是论坛查询。我只是想知道为什么?这些是我找到的几个链接:Run-TimeStorageOrganizationRun-TimeMemoryOrganizationMemorylayoutofCprocess^pdf^我想从一本合适的书而不是一些网络链接中学习这一点。(兰迪海德的书也是一本书,但其他书)。我可以在哪本书中找到关于这个主题的清晰和更多信息?我也想知道,为什么操作系统的书没有在他们的书中介绍这

memory - 有关可执行程序(进程)的内存布局的更多信息

我参加了三星的面试。他们问了很多关于程序内存布局的问题。我对此几乎一无所知。我用谷歌搜索了“可执行程序的内存布局”。“进程的内存布局”。我很惊讶地发现关于这些主题的信息并不多。大多数结果是论坛查询。我只是想知道为什么?这些是我找到的几个链接:Run-TimeStorageOrganizationRun-TimeMemoryOrganizationMemorylayoutofCprocess^pdf^我想从一本合适的书而不是一些网络链接中学习这一点。(兰迪海德的书也是一本书,但其他书)。我可以在哪本书中找到关于这个主题的清晰和更多信息?我也想知道,为什么操作系统的书没有在他们的书中介绍这

c - 为什么 CPU 在字边界上访问内存?

我听说很多数据应该在内存中正确对齐以提高访问效率。CPU在字边界上访问内存。所以在下面的场景中,CPU必须进行2次内存访问才能获得一个单词。Supposing:1word=4bytes("|"standsforwordboundary."o"standsforbyteboundary)|----o----o----o----|----o----o----o----|(ThewordboundaryinCPU'seye)----o----o----o----(WhatIwanttoreadfrommemory)为什么会发生这种情况?CPU只能在字边界读取的根本原因是什么?如果CPU只能访

c - 为什么 CPU 在字边界上访问内存?

我听说很多数据应该在内存中正确对齐以提高访问效率。CPU在字边界上访问内存。所以在下面的场景中,CPU必须进行2次内存访问才能获得一个单词。Supposing:1word=4bytes("|"standsforwordboundary."o"standsforbyteboundary)|----o----o----o----|----o----o----o----|(ThewordboundaryinCPU'seye)----o----o----o----(WhatIwanttoreadfrommemory)为什么会发生这种情况?CPU只能在字边界读取的根本原因是什么?如果CPU只能访

c++ - 为什么这种 SIMD 乘法不如非 SIMD 乘法快?

假设我们有一个函数将两个数组相乘,每个数组有1000000个double值。在C/C++中,该函数如下所示:voidmul_c(double*a,double*b){for(inti=0;i!=1000000;++i){a[i]=a[i]*b[i];}}编译器使用-O2生成以下程序集:mul_c(double*,double*):xoreax,eax.L2:movsdxmm0,QWORDPTR[rdi+rax]mulsdxmm0,QWORDPTR[rsi+rax]movsdQWORDPTR[rdi+rax],xmm0addrax,8cmprax,8000000jne.L2repret从

c++ - 为什么这种 SIMD 乘法不如非 SIMD 乘法快?

假设我们有一个函数将两个数组相乘,每个数组有1000000个double值。在C/C++中,该函数如下所示:voidmul_c(double*a,double*b){for(inti=0;i!=1000000;++i){a[i]=a[i]*b[i];}}编译器使用-O2生成以下程序集:mul_c(double*,double*):xoreax,eax.L2:movsdxmm0,QWORDPTR[rdi+rax]mulsdxmm0,QWORDPTR[rsi+rax]movsdQWORDPTR[rdi+rax],xmm0addrax,8cmprax,8000000jne.L2repret从

c++ - 使用大数组索引增加访问时间

问题我目前编写了一个包含大数组的程序,我对不同数组的处理时间感到非常困惑。一方面我有7个“较小”的数组(我只想增加循环中的各种元素。每个循环我都会在每个数组的相同索引处增加元素。这意味着我想在同一索引处增加所有14个数组的每个循环。这需要21秒。如果我只增加7个较小的数组,它只需要2秒,如果我只增加7个较大的数组,则需要18秒!为了更好地说明,我编写了一个示例代码:#include#includeusingnamespacestd;intmain(intargc,char*argv[]){inti;int*ExampleArray1=newint[16384];//3"small"ar

c++ - 使用大数组索引增加访问时间

问题我目前编写了一个包含大数组的程序,我对不同数组的处理时间感到非常困惑。一方面我有7个“较小”的数组(我只想增加循环中的各种元素。每个循环我都会在每个数组的相同索引处增加元素。这意味着我想在同一索引处增加所有14个数组的每个循环。这需要21秒。如果我只增加7个较小的数组,它只需要2秒,如果我只增加7个较大的数组,则需要18秒!为了更好地说明,我编写了一个示例代码:#include#includeusingnamespacestd;intmain(intargc,char*argv[]){inti;int*ExampleArray1=newint[16384];//3"small"ar

c++ - 用于动态代码生成的最可移植库?

我正在寻找最便携的汇编程序库,例如asmjit或jitasm.当我说“最便携”时,我的意思是它对各种架构的支持最多。语言并不重要,但C++将是最好的解决方案,尤其是与GCC结合使用时。对我来说重要的架构是x86/64、PowerPC和ARM。 最佳答案 DynASM,由LuaJIT使用,支持x86、x64、ARM、MIPS和PowerPC。 关于c++-用于动态代码生成的最可移植库?,我们在StackOverflow上找到一个类似的问题: https://st

c++ - 用于动态代码生成的最可移植库?

我正在寻找最便携的汇编程序库,例如asmjit或jitasm.当我说“最便携”时,我的意思是它对各种架构的支持最多。语言并不重要,但C++将是最好的解决方案,尤其是与GCC结合使用时。对我来说重要的架构是x86/64、PowerPC和ARM。 最佳答案 DynASM,由LuaJIT使用,支持x86、x64、ARM、MIPS和PowerPC。 关于c++-用于动态代码生成的最可移植库?,我们在StackOverflow上找到一个类似的问题: https://st