`
weihe6666
  • 浏览: 430277 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

静态区域和动态区域内存的分配

阅读更多
//动态区域分配内存
#include<iostream>
using namespace std;

 char *strA()
{
	char *str = "hello world";
	cout << "str= " << str << endl;
	cout << "&str= " << &str << endl;
	return str;
}

void  GetMemory(char **p,int num)
{
	*p=(char *) malloc(sizeof((char *)num));
}

int main()
{
	 char *str = NULL;
	GetMemory(&str, 100);
	str = strA();
	//p = strA();
	cout<< "str= " << str << endl;
	return 0;
}


这是在动态区域中分配内存:char *str = NULL;这只是声明了一个指针,并没有给指针分配地址,也就是说如果想用这个指针,必需给它分配内存,(一般常用的方法是在声明的时候就给指针分配内存),调用GetMemory()给指针分配内存,这里的*p=(char *) malloc(sizeof((char *)num));在堆中给str分配一定大小的空间。
    str = strA();是把函数strA()返回的地址给str,这样就出现问题了,那么刚才GetMemory()给指针分配内存就没有用到,str直接指向函数strA()返回的地址。怎么改正这个问题?

//动态区域分配内存
#include<iostream>
using namespace std;

 char *strA()
{
	char *str = "hello world";
	cout << "str= " << str << endl;
	cout << "&str= " << &str << endl;
	return str;
}

//void  GetMemory(char **p,int num)
//{
//	*p=(char *) malloc(sizeof((char *)num));
//}

int main()
{
	 char *str = strA();
//	GetMemory(&str, 100);
//	str = strA();
	//p = strA();
	cout<< "str= " << str << endl;
	return 0;
}





2.如何在静态存储区内分配内存

//如何在静态区域分配内存
#include<iostream>
using namespace std;

 const char *strA()
{
	char *str = "hello world";
	cout << "str= " << str << endl;
	cout << "&str= " << &str << endl;
	return str;
}

//void  GetMemory(const char **p,int num)
//{
//	*p=(char *) malloc(sizeof((char *)num));
//}

int main()
{
	const char *str = strA();
//	GetMemory(&str, 100);
//	str = strA();
	//p = strA();
	cout<< "str= " << str << endl;
	return 0;
}


这段代码不知能否在静态存储区内分配内存,字符串hello world分配在那个区域?
分享到:
评论

相关推荐

    关于堆栈、静态、动态内存的理解

    全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量、未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 文字常量区 —...

    C语言 动态内存分配详解

    C语言 动态内存分配详解 动态内存分配涉及到堆栈的概念:堆栈是两种数据结构。堆栈都是数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。 栈(操作系统):由操作系统自动分配释放 ,...

    c_c++中内存区域划分大总结

    3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放 4.另外还有一个专门放常量的地方...

    程序的内存分配

    3、全局区(静态区)(static)―,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字...

    深入Java核心 Java内存分配原理精讲

    一般Java在内存分配时会涉及到以下区域:  ◆寄存器:我们在程序中无法控制  ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中  ◆堆:存放用new产生的数据  ◆静态域:...

    JAVA内存分配精讲.docx

    一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 ◆堆:存放用new产生的数据 ◆静态域:存放在对象中用...

    全局变量、静态全局变量、静态局部变量和局部变量的区别2.pdf

    变量可以分为全局变量、静态全局变量、静态局部变量和局部变量 按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分:全局变量在整个工程文件内都...

    预备知识―程序的内存分配

    一、预备知识―程序的内存分配 一个由 c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。 其操作方式类似于数据结构中的栈。 2、堆区...

    堆内存和栈内存详解 ESP

    3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字...

    踏入C++中的雷区C++内存管理详解

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

    深入C语言内存区域分配(进程的各个段)详解

     动态内存分配 (1)代码段(text segment):存放CPU执行的机器指令。通常代码段是可共享的,这使得需要频繁被执行的程序只需要在内存中拥有一份拷贝即可。代码段也通常是只读的,这样可以防止其他程序意外地修改其...

    系统级编程 ss6 选择题及复习纲要

    1:指针:是一个变量,可以存储...静态分配的变量在main之前分配内存和初始化变量,只到程序终止才释放内存。每次调用函数不会重新初始化。 5:动态分配:在程序运行期间为变量分配内存空间。其中包括栈分配和堆分配。

    c++的内存分配

    全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放文字常量区—常量...

    内存管理选择题.txt

    本题考查动态重定位和静态重定位在作业运作过程中发生的时间。 静态重定位由操作系统中的重定位装入程序来完成。用户作业的相对于“*0” 编址的目标程序,是重定位装入程序的输入。重定位装入程序按照分配区域的起 ...

    C/C++程序内存的各种变量存储区域和各个区域详解

    知道如上一些内存分配机制,有助于我们理解指针的概念。C/C++不提供垃圾回收机制,因此需要对堆中的数据进行及时销毁,防止内存泄漏,使用free和delete销毁new和malloc申请的堆内存,而栈内存是动态释放。全局变量、...

    C++学习代码(实例)

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

    深入解析C语言中的内存分配相关问题

    C内存分配区域 程序代码区 存放函数体的二进制代码 全局数据区 全局变量和静态变量的存储是放在一起的。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。常量...

    c语言stack(栈)和heap(堆)的使用详解

    3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。4、文字常量区...

    scratchpad:Rust库提供具有双端分配支持的类似堆栈的内存分配器

    便笺Rust库提供具有双端分配支持的类似堆栈的内存分配器。注意: scratchpad目前处于维护模式。 我一直在考虑进行大型清理,以消除多余的功能并减少unsafe代码的表面积,但是目前尚无时间表。 我仍然会根据需要应用...

Global site tag (gtag.js) - Google Analytics