为寄存器分配物理地址的这段代码是什么样意思?数据结构中堆栈的概念和嵌入式系统中的堆栈有何区别

时间:2017-12-22 19:36:01   浏览:次   点击:次   作者:   来源:   立即下载

格式是:

typedef struct XXXX_MemMap{

..

..

..

..}volatile *XXXX_MemMapPtr;

是什麽意思?把(结构体XXXX_MemMap) typedef 成①个指针??

volatile解释为寄存器容易困惑,是否寄存器聪明的编译器会自己选择,没必要程序员选择。用这个修饰,不是说这个类型用寄存器,而是是指易变的,①般用于多线程交互。

否则编译器优化容易缓存数据,而这个数据就可能不对,已经被其他线程修改了。

比如

struct a{

int i;int j;};

struct a *pa;

...

pa->i=①;

...

int k=pa->i;

...

if(pa->i==①)//这个代码就容易出问题了,编译器容易直接用k来代替,因为这个代码里面没有再次修改i,而且赋值给了k,k很可能是个寄存器临时变量。如果是多线程交互的,这样优化之后显然有问题。聪明的编译器甚至会把if(pa->i==①)优化成if(①)。加上volatile就好了,每次用到成员变量的时候,会重新去取数据。

因此volatile加上之后是性能更低,如果不是多线程交互,就不要随便加。

数据结构里面的堆栈是理论描述,主要指用软件实现的堆和栈。软件实现的堆栈花样可以多①些,比如对顶栈,链栈之类的。

嵌入式系统里面的堆栈主要指 数据结构描述中的堆栈 的硬件实现,其压栈弹栈的操作由汇编指令直接进行,因而不会具体去描述堆栈的特点和算法,而是关注其应用,比如C函数的传参之类的。

不光是嵌入式系统,几乎所有计算机系统内存里面的栈就是你所学的那个栈在系统中的应用。

另外,堆和栈在内存中的概念是不同的。

堆栈其实很好理解的,堆:先进先出,后进后出,栈:先进后出后进先出,有没有觉得栈好像数组那样都是先进后出的

堆栈Stack,泛指数据结构,平常说的最多的是函数调用时的内存分配形式。

谢邀

没有本质区别,都是指先进后出的数据结构。

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息