标签: computer-architecture

计算机程序运行时会发生什么?

我知道一般理论,但我不能适应细节.

我知道程序驻留在计算机的辅助内存中.程序开始执行后,它将完全复制到RAM中.然后处理器一次检索一些指令(它取决于总线的大小),将它们放入寄存器并执行它们.

我也知道计算机程序使用两种内存:堆栈和堆,它们也是计算机主存储器的一部分.堆栈用于非动态内存,堆用于动态内存(例如,与newC++中的运算符相关的所有内容)

我无法理解的是这两件事是如何联系起来的.用于执行指令的堆栈在什么时候?指令从RAM,堆栈到寄存器?

c++ memory x86 operating-system computer-architecture

176
推荐指数
4
解决办法
2万
查看次数

为什么基于JVM堆栈和Dalvik VM注册?

我很好奇,为什么Sun决定以JVM堆栈为基础,Google决定以DalvikVM注册为基础?

我想JVM不能真正假设目标平台上有一定数量的寄存器,因为它应该是平台无关的.因此,它只是将寄存器分配等推迟到JIT编译器.(如我错了请纠正我.)

所以Android人员认为,"嘿,那效率很低,让我们马上去找一个基于寄存器的vm ......"?但等等,有多个不同的Android设备,Dalvik的目标是多少个寄存器?Dalvik操作码是否针对一定数量的寄存器进行了硬编码?

目前市场上所有Android设备的寄存器数量是否相同?或者,是否在dex-loading期间执行了寄存器重新分配?这一切如何结合在一起?

jvm computer-architecture dalvik cpu-registers vm-implementation

95
推荐指数
3
解决办法
2万
查看次数

1字节!= 8位的系统?

我一直在读句子

不要依赖大小为8位的1字节

使用CHAR_BIT而不是8作为常量来转换位和字节

等等.今天有什么现实生活系统,这是真的吗? (我不确定C和C++之间是否存在差异,或者它是否与语言无关.如果需要,请重新加入.)

c c++ history byte computer-architecture

85
推荐指数
6
解决办法
2万
查看次数

当空指针不是所有位为零时,如何正确编写C/C++代码

正如comp.lang.c常见问题所述,有一些架构,其中空指针不是所有位零.所以问题是实际检查以下结构:

void* p = get_some_pointer();
if (!p)
    return;
Run Code Online (Sandbox Code Playgroud)

我是否p与机器相关的空指针进行比较或者我是否p与算术零进行比较?

我应该写

void* p = get_some_pointer();
if (NULL == p)
    return;
Run Code Online (Sandbox Code Playgroud)

相反,为这样的架构做好准备还是仅仅是我的偏执?

c c++ computer-architecture

69
推荐指数
4
解决办法
4800
查看次数

在'perf stat'结果中,什么是停滞 - 循环 - 前端和停滞 - 循环 - 后端?

有人知道在perf stat结果中stalled -cycles-frontendstalled-cycles-backend是什么意思吗?我在互联网上搜索但没有找到答案.谢谢

$ sudo perf stat ls                     

Performance counter stats for 'ls':

      0.602144 task-clock                #    0.762 CPUs utilized          
             0 context-switches          #    0.000 K/sec                  
             0 CPU-migrations            #    0.000 K/sec                  
           236 page-faults               #    0.392 M/sec                  
        768956 cycles                    #    1.277 GHz                    
        962999 stalled-cycles-frontend   #  125.23% frontend cycles idle   
        634360 stalled-cycles-backend    #   82.50% backend  cycles idle
        890060 instructions              #    1.16  insns per cycle        
                                         #    1.08  stalled cycles per insn
        179378 branches                  #  297.899 M/sec                  
          9362 branch-misses             #    5.22% of all …
Run Code Online (Sandbox Code Playgroud)

linux optimization performance cpu-architecture computer-architecture

68
推荐指数
4
解决办法
2万
查看次数

L1和L2缓存的行大小

从以前的问题,在这个论坛上,我了解到,在大多数存储系统中,L1缓存L2缓存的子集,是指从L2删除任何条目也从L1删除.

所以现在我的问题是如何在L1缓存中为L2缓​​存中的条目确定相应的条目.存储在L2条目中的唯一信息是标签信息.根据此标记信息,如果我重新创建addr,如果L1和L2缓存的行大小不相同,它可能会跨越L1缓存中的多行.

该体系结构是否真的打扰了两条线路,或者它只是保持具有相同线路大小的L1和L2缓存.

我知道这是一个政策决定,但我想知道常用的技术.

caching memory-management computer-architecture

64
推荐指数
3
解决办法
8万
查看次数

对齐缓存行并了解缓存行大小

为了防止错误共享,我想将数组的每个元素对齐到缓存行.所以首先我需要知道缓存行的大小,因此我为每个元素分配了大量的字节.其次,我希望数组的开始与高速缓存行对齐.

我使用的是Linux和8核x86平台.首先,我如何找到缓存行大小.其次,如何与C中的缓存行对齐.我正在使用gcc编译器.

因此,假设高速缓存行大小为64,结构将遵循.

element[0] occupies bytes 0-63
element[1] occupies bytes 64-127
element[2] occupies bytes 128-191
Run Code Online (Sandbox Code Playgroud)

等等,当然假设0-63与高速缓存行对齐.

c linux caching computer-architecture memory-alignment

58
推荐指数
5
解决办法
6万
查看次数

malloc可以分配的最大内存

我试图在我的机器(1 Gb RAM 160 Gb HD Windows平台)上计算出最大程度上可以使用多少内存.

我读到malloc可以分配的最大内存仅限于物理内存(堆上).

此外,当程序超过内存消耗到某个级别时,计算机将停止工作,因为其他应用程序无法获得所需的足够内存.

所以要确认一下,我在C写了一个小程序:

int main(){  
    int *p;
    while(1){
        p=(int *)malloc(4);
        if(!p)break;
    }   
}
Run Code Online (Sandbox Code Playgroud)

我希望有一段时间内存分配失败并且循环会中断,但是我的计算机挂起,因为它是一个无限循环.

我等了大约一个小时,最后我不得不强行关闭电脑.

一些问题:

  • malloc是否也从HD分配内存?
  • 上述行为的原因是什么?
  • 为什么在任何时候都没有循环中断?
  • 为什么没有分配失败?

c malloc operating-system memory-management computer-architecture

44
推荐指数
5
解决办法
8万
查看次数

64位应用程序的内存使用开销是多少?

从我迄今为止发现的内容可以清楚地看出,针对64位架构编译的程序使用的内存量是其32位替代品的两倍 - https://superuser.com/questions/56540/32-bit-vs- 64位系统.

这是否意味着为64位编译的代码平均使用的RAM是32位版本的两倍?

我不知何故怀疑它,但我想知道真正的开销是什么.我想,小类型,如short,bytechar相同大小的64位架构?我不是很确定byte.鉴于许多应用程序使用大型字符串(如Web浏览器等),char在大多数实现中主要由数组组成,因此开销可能不会太大.

因此,即使数字类型在64位上更大intlong更大,是否会对RAM的使用产生重大影响?

c memory memory-management computer-architecture

44
推荐指数
2
解决办法
5547
查看次数

计算机中的字大小是什么意思?

我试图弄清楚"单词"是什么意思,我查看了维基,定义含糊不清.所以我的问题是什么是"字大小"?它是数据总线,地址总线的长度吗?

cpu-word computer-architecture

43
推荐指数
4
解决办法
7万
查看次数