内存地址分配

1 内存地址是从高地址到低地址进行分配的:  

int  i = 1 ;
int  j = 1 ;
cout
<<& i << endl <<& j << endl; // 输出:0012FF60(高地址处) 0012FF54(低地址处)

 

2  函数参数列表的存放方式是,先对最右边的形参分配地址,后对最左边的形参分配地址。


3 Little-endian模式的CPU对操作数的存放方式是从低字节到高字节的

0x1234的存放方式入下:

0X4000  0x34

0X4001  0x12 

Big-endian模式的CPU对操作数的存放方式是从高字节到低字节的

0x1234的存放方式入下:

0x4000 0x12

0x4001 0x34

联合体union的存放顺序是所有成员都从低地址开始存放。


int  checkCPU()
{
    union w
    {
        
int  a;
        
int  b;
    }c;
    c.a
= 1 ;
    
return (c.b == 1 ); // 如果b=1则是Little-endian.
}


4  一个变量的地址是由它所占内存空间中的最低位地址表示的。

0X4000  0x34

0X4001  0x12

0x1234 的地址位0x4000


5  堆栈的分配方式是从高内存地址向低内存地址分配的。


    char *p=(char*)malloc(1);//为指针p分配一块内存

    free(p); // 释放p所指向的内存
    free(p); // error,因为p所指向的内存已经释放掉,再次释放原来的内存区域将会引起错误操作
    p = 0 ; // 将0赋给指针p
    free(p);
    free(p);
// ok,对一个空指针,可以多次释放

 

  char *p=(char*)malloc(0);//p!=NULL,多次释放p也会引起错误 

 

7 calloc和realloc

void *calloc(size_t num_elements,size_t element_size);

calloc也用于分配内存,malloc与calloc的主要区别是

1 后者在返回指向内存的指针之前把它初始化为0

2 calloc的参数包括所需元素的数量和每个元素的字节数,根据这些值,能够计算出总共需要分配的内存

void realloc(void *ptr,size_t new_size);

realloc用于修改一个原先已经分配内存块的大小,使用这个函数,你可以使一块内存扩大或缩小。如果它用于扩大一个内存块,那么这块内存原来的内容依旧保留,新增加的内存添加到原来内存块的后面,新内存并未以任何方式初始化。如果它用于缩小一块内存,该内存块尾部的部分内存被拿掉,剩余部分内存的原先内存依旧保留。

  如果原先的内存块无法改变大小,realloc将分配另一块正确大小的内存,并把原来内存的内容复制到新的块上,因此,在使用realloc之后,你将不能再使用指向旧内存的指针,而是应该改用realloc返回的新指针

  如果realloc函数的第一个参数是NULL,那么它的行为和malloc是一样的。


8  在使用动态内存分配的过程中,常常会遇到许多错误:

1、对NULL指针进行解引用

2、对分配的内存进行操作时越过边界

3、释放并非动态分配皮的内存

4、试图释放一块动态分配的内存的一部分

5、一块动态内存被释放后继续使用


9  

 







 

 






 

 





 

转载于:https://www.cnblogs.com/wangtianxj/archive/2009/03/31/1425420.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值