当前位置:首页 » 编程语言 » c语言中内存

c语言中内存

发布时间: 2022-06-07 11:32:20

‘壹’ c语言的内存变量

存储类别指的是数据在内存中存储的方法。存储方法分为静态存储和动态存储两大类。标准C语言为变量、常量和函数定义了4种存储类型:extern、auto、static、register。根据变量的存储类别,可以知道变量的作用域和存储期。这4种存储类型可分为两种生存期限:永久的(在整个程序执行期都存在)和临时的(暂时保存在堆栈和寄存器中)。extern和static用来标识永久生存期限的“变量和函数”,而anto和register用来标识临时生存期限的"变量"。只有变量才有临时生存期限。一个变量和函数只能具有一个存储类型,也只能有一种生存期限。

内存中供用户使用的空间有三部分:

程序区:存放程序的可执行代码;

静态存储区:存放静态变量(全局变量和静态局部变量);

动态存储区:存放函数调用时调用函数的现场保护和返回地址、函数形参、自动局部变量;

变量的声明分为”定义性声明“(需建立存储空间,如:int a;)和”引用性声明“(不需建立存储空间,如extern a;)。广义上讲,声明包括定义,一般为叙述方便,把建立存储空间的声明称定义,而不不需建立存储空间的声明称声明。

auto

函数中的局部变量,如果不用关键字static加以声明,编译系统对它们是动态地分配存储空间的。函数的形参和在函数中定义的变量(包括在复合语句中定义的变量)都属此类。在调用该函数时,系统给形参和函数中定义的变量分配存储空间,数据存储在动态存储区中。在函数调用结束时就自动释放这些空间。如果是在复合语句中定义的变量,则在变量定义时分配存储空间,在复合语句结束时自动释放空间。因此这类局部变量称为自动变量(auto variable)。自动变量用关键字auto作存储类别的声明。

对自动变量赋初值,不是在编译时进行的,而是在函数调用时进行。对自动变量来说,若不赋初值,则它的值是一个不确定的值。

‘贰’ C语言中内存的分配方式有哪3种,用文字或表达式列出各自的一个例子

1.malloc(n*sizeof(int))
/*
请求n个连续的、每个长度为整型的空间,若成功返回这些空间的首地址,失败返回0
*/
2.realloc(p,sizeof(int)*n)
/*
给一个已经分配了地址的指针重新分配空间,参数p为原有的空间地址*/
3.数组的定义。

‘叁’ 在c语言中 占用的内存

那个一般是以前的系统了16位的
现在一般是32位
不同的计算机他们的字母
数字等所占字节数不同。
但是一个字符一般都只占一个字节
而整数一般占
2个或4个字节
在C语言中
有个sizeof函数。
你定义个整数
i
n
int
i,n;
n=sizeof(i);
再输出n的只看是几
就代表几位了。。
printf("%d",n);
字符就用
char
i;
int
n;
还有实型
float
i;
int
n;

‘肆’ c语言内存有几种分配方式

基本上C程序的元素存储在内存的时候有3种分配策略:
静态分配
如果一个变量声明为全局变量或者是函数的静态变量,这个变量的存储将使用静态分配方式。静态分配的内存一般会被编译器放在数据段或代码段来存储,具体取决于实现。这样做的前提是,在编译时就必须确定变量的大小。 以IA32的x86平台及gcc编译器为例,全局及静态变量放在数据段的低端;全局及静态常量放在代码段的高端
自动分配
函数的自动局部变量应该随着函数的返回会自动释放(失效),这个要求在一般的体系中都是利用栈(Stack)来满足的。相比于静态分配,这时候,就不必绝对要求这个变量在编译时就必须确定变量的大小,运行时才决定也不迟,但是C89仍然要求在编译时就要确定,而C99放松了这个限制。但无论是C89还是C99,都不允许一个已经分配的自动变量运行时改变大小。
所以说C函数永远不应该返回一个局部变量的地址。
要指出的是,自动分配也属于动态分配,甚至可以用alloca函数来像分配堆(Heap)一样进行分配,而且释放是自动的。
动态分配
还有一种更加特殊的情况,变量的大小在运行时有可能改变,或者虽然单个变量大小不变,变量的数目却有很大弹性,不能静态分配或者自动分配,这时候可以使用堆(Heap)来满足要求。ANSI C定义的堆操作函数是malloc、calloc、realloc和free。
使用堆(Heap)内存将带来额外的开销和风险。

‘伍’ c语言中基本数据类型包括哪些分别占多大内存

数据类型在内存上所占空间大小与操作系统位数有关。一般常说的数据类型在内存上所占空间大小默认指的都是32位操作系统,这也是用的比较多的。
char 1字节
short 2字节
int 4字节
long 4字节(64位操作系统下为8字节)
float 4字节
double 8字节

‘陆’ C语言中,各种类型的整型数据在内存中都占用4个字节吗

不是。

C标准并没有具体给出规定哪个基本类型应该是多少个字节数,而且这个也与OS、编译器有关,比如同样是在32位操作系统,VC++的编译器下int类型为4个字节,而在tuborC下则是2个字节。

整型类型在虽然16位、32位或者64位的机子各种类型并不一样,但有几条规则(ANSI/ISO制定):

short至少占用2个字节。

int建议为一个机器字长,32位环境下为4字节,64位环境下为8字节。

short的长度不能大于int,long的长度不能小于int。



(6)c语言中内存扩展阅读

整型数据分为基本整形(int)、短整型(short int)、长整型(long int)以及新添加的双长整型(long long int)。

基本整形(int):一般占据2个或者4个字节,这都是有编译系统决定的。一般来讲在vc中计算机给它分配4个字节,在计算机中整型数据一般是按补码的形式存储的。

短整型(short int):在vc中计算机分配给短整型的内存大小为2个字节。存储方式与基本整形相同,一个短整型的数据范围是:-32768-32767。

长整型数据(long int):在vc中系统分配给它4个字节,多以一个长整型数据的范围为-2的31次方到2的31次方减一。

双长整型(long long int):在vc中系统给它分配8个字节,这种数据类型一般比较少用。

‘柒’ c语言数组在内存中是怎么分配的

C语言中内存为分三类:栈区、堆区、静态数据区。

局部变量在栈上分配,函数调用前的栈指针,要和函数返回后的栈指针一样,否则就会出错。

void test(void)

{

char i,a[10];

printf("0x%x", &i);

printf("0x%x", a);

printf("0x%x", a+1);

printf("0x%x", a+2);

printf("0x%x", a+3);

}

(7)c语言中内存扩展阅读

c语言数组在内存分配

示例:

#include<stdio.h>

int main()

{

int a[4] = {11,12,13,14};

int b[4] = {21,22,23,24};

int *pa = &a;

int i = 0;

while(i<8)

{

i++;

printf("now *p value = %d and",*pa);

printf("p addr value = %d ",pa);

pa++;

}

return 0;

}

‘捌’ C语言问题:内存的分配方式有哪几种

1、静态存储区分配

内存分配在程序编译之前完成,且在程序的整个运行期间都存在,例如全局变量、静态变量等。

2、栈上分配

在函数执行时,函数内的局部变量的存储单元在栈上创建,函数执行结束时这些存储单元自动释放。

3、堆上分配

堆分配(又称动态内存分配)。程序在运行时用malloc或者new申请内存,程序员自己用free或者delete释放,动态内存的生存期由我们自己决定。

(8)c语言中内存扩展阅读

栈上分配数组

#include<iostream>

usingnamespacestd;

voidmain()

{

int**arr=NULL;//int型二维数组

introws,columns;

cin>>rows;//2

cin>>columns;//3

//请在此处编写代码,根据rows和columns在栈上分配一个数组arr

...你的代码...

//赋值给数组元素

for(introwIndex=0;rowIndex<rows;rowIndex++)

{

for(intcolumnIndex=0;columnIndex<columns;columnIndex++)

{

arr[rowIndex][columnIndex]=columnIndex+(rowIndex+1)*1000+1;

}

}

//打印每个数组元素

for(rowIndex=0;rowIndex<rows;rowIndex++)

{

for(intcolumnIndex=0;columnIndex<columns;columnIndex++)

{

printf("%d",arr[rowIndex][columnIndex]);

}

printf(" ");

}

}

‘玖’ c语言中动态分配内存的关键字

1、malloc函数:其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。
2、free函数:由于内存区域总是有限的,不能不限制地分配下去,而且一个程序要尽量节省资源,所以当所分配的内存区域不用时,就要释放它,以便其它的变量或者程序使用。这时我们就要用到free函数。
3、calloc函数:其作用是在内存的动态存储区中分配n个长度为 size 的连续空间。函数返回一个指向分配区域的起始位置的指针;如果分配不成功,则返回NULL。

热点内容
mysql配置访问ip 发布:2025-02-08 16:22:49 浏览:115
体表面积简易算法 发布:2025-02-08 16:18:04 浏览:687
存储器的分级储存是如何实现的 发布:2025-02-08 16:11:27 浏览:193
电脑怎么看路由器密码 发布:2025-02-08 16:10:13 浏览:401
汇编宏编译 发布:2025-02-08 16:08:30 浏览:194
androidlayoutview 发布:2025-02-08 15:45:01 浏览:622
大货车有哪些安全应急配置 发布:2025-02-08 15:44:55 浏览:538
安卓手机下黎明杀机为什么会闪退 发布:2025-02-08 15:38:27 浏览:489
定位算法源码 发布:2025-02-08 15:36:43 浏览:543
上游服务器异常什么意思 发布:2025-02-08 15:15:46 浏览:176