1006_C/C++笔试题_15:16道c语言面试【13/14】

13.评价下面的代码片段:

  
  
  
  
  1. unsigned int zero = 0; 
  2. unsigned int compzero = 0xFFFF;

对于一个int型不是16位的处理器来说,上面的 代码是不正确的。应编写如下:
unsigned int compzeor = ~0;
这一问题能真正检验应试者是否懂得处理器字长的重要性。在我的经验里,好的嵌入式程序员非常准确的明白硬件的细节和它的局限性,然而PC机程序员往往把硬件作为一个无法避免的烦恼。

14.动态内存分配:尽管不想非嵌入式计算机那么常见,嵌入式系统还是有从堆heap中动态分配内存的过程的,那么在嵌入式系统中动态分配内存可能发生什么问题呢?

这里,我希望应试者能够提到内存碎片,碎片收集的问题,变量的持行时间等等。这个主题已经在ESP杂志中被广泛讨论过了。实例如下:问代码片段输出的是什么?
  
  
  
  
  1. char *ptr; 
  2. if( (ptr=(char*)malloc(0)) == NULL ) 
  3.    puts("got a null pointer!"); 
  4. else 
  5.    puts("got a valid pointer!");

输出 got a valid pointer.
PS:这里我不知道原作者所说的什么内存碎片、碎片收集、变量的持行时间到底指什么,也不知道这三个概念和以上5行代码的关系,希望明白的人给讲讲。

你可能感兴趣的:(c/c++,内存碎片,碎片收集,变量持行时间,处理器字长)