C/C++内存操作

内存操作的三种方法

一.从静态存储区分配

从静态存储区域分配。是指内存在程序编译的时候就已经分配好,这块内存在程序的整
个运行期间都存在。例如全局变量,static 变量。(未初始化的内存分配在bss区,初始化的在数据区)

二.在栈上创建

在栈上创建内存。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函
数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集(栈区)
中,效率很高,但是分配的内存容量有限。

三.从堆区分配

从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意
多少的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存
期由我们决定,使用非常灵活,但问题也最多(注:关于malloc与new的解析见四)。(堆区)

内存操作经典示例

#include <stdio.h>
#include <stdlib.h>
char *itoa(int n)
{
    // static char buf[20];   
    //要是不加static,编译器会提示,return返回的是局部变量的地址。
    //局部变量在栈区,itoa函数结束,内存空间就被释放了,返回的值不确定
	//加了static后,内存分配在BSS区,不会随着函数的返回而被释放掉。
    char *buf;
    //也可以直接放在itoa函数的参数位置 char *itoa(int n,char *buf),调用函数的时候,
    //第二个参数可以只传一个NULL,但必须在函数定义里为buf 用malloc分配空间,否则也会段错误
    buf = (char *)malloc(sizeof(buf));
    //若使用malloc动态分配在堆上,也可以达到目的。但是要注意使用完后free掉内存空间,
    //另外,若此时无malloc,
	//只是char *buf会出现段错误(往一个没有内存空间的地址变量里写东西)
										 
    sprintf(buf,"%d",n);
	
	return buf;
	free(buf);        
	//return结束后释放,若在return之前释放,得不到任何返回值
    //buf 被free后成为野指针,若要继续使用,可以先赋值为NULL,再进行指针操作 
	
   
}
int main(int argc, char *argv[])
{
    char *str = itoa(5);
    printf("str is :%s\n",str);

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值