⑴ 怎么用c语言写个循环来占满4G内存
#include<stdio.h>
#include<stdlib.h>
# include<string.h>
void main()
{
int *a;
int b=1024*1024*sizeof(int);
int i=0;
while(1) {
a=(int *)malloc(b);
memset(a, i++, sizeof(b)); //评论说扛住了,估计是编译器优化了,只好上大杀器了
}
}
卡死你。。。
⑵ C语言结构体占内存多少
C语言获取变量、数据类型内存占多少,使用sizeof运算符即可。
关于结构体所占的内存多少,一般还要考虑对齐的问题。只所以要进行数据对齐是因为编译器对结构的存储的特殊处理能提高CPU存储变量的速度,一般来说,32位的CPU内存以4字节对齐,64位的CPU的以8字节的对齐。一般可以使用#pragma pack()来指出对齐的字节数。比如下面的代码,在debug会显示结构体test的内存大小为28,如果生成release版则所占内存大小为32 。
#include<stdio.h>
#ifdef_DEBUG
#pragmapack(4)
structtest
{
charx[13];//13
intd;//4
doublef;//8
}ss;
#else
#pragmapack(8)
structtest
{
charx[13];//13
intd;//4
doublef;//8
}ss;
#endif
intmain(void){
printf("%d ",sizeof(ss));
return0;
}
⑶ c语言中怎么看在内存中占用的字节数是多少如题。。
我认为应该是4个字节,在字符串末尾有一个'\0'字符串结束标志,它占用一个字节,如下程序可以验证!
⑷ 用2进制,汇编,c语言编写同一个软件分别占多少空间
很高兴能为你解答这个问题!!!
1. 但是如果你能够提出这样的问题来,说明你对C语言,计算机工作原理了解的还不够。
2. 因为计算机只能存储与运算二进制数值,(除去特殊的模拟芯片,这些芯片一般也只是转换芯片,即A/D D/A芯片)。
3. 请网络计算机科学之父:图灵
PS:所以你的题目我该怎么理解呢?
先来解释下C语言,汇编语言,二进制可执行文件。
C语言编写完成时是文本文件(其实文本文件本质也是二进制文件,因为计算机只会二进制),需要编译器编译后生成二进制可执行文件。
汇编语言最接近二进制文件,它的汇编器只需要将汇编指令助记符替换为对应的二进制值(包括地址、符号替换,逻辑优化,等等)。(注:鄙人只学习过ARM汇编,且水平有限,所以此条仅供参考)
二进制可执行文件:之所以称之为二进制可执行文件是为了体现“可执行”这个特性,因为计算机内一切都是二进制(别嫌我啰嗦,重要的事情说三遍~~~),他可能是类似C语言的某种高级语言编译而产生的'可执行'二进制文件。
==================我是分割线============================
现在来假设你的题目:
一个可执行二进制文件在二进制(.bin)状态和,汇编状态(.asm),C语言状态(.C)哪个文件在磁盘的占用空间小?
答:占用空间:C语言>汇编>大于二进制可执行文件。(大多数情况下)注意把C语言用到的库文件(.lib或.so或.dll等)计算在内
但是C语言可读性,可编写性都大于汇编,汇编大于可执行二进制文件。
完成同一个功能的程序,使用C语言、汇编、可执行二进制直接编写来实现,到他们全部被编译器、链接器转化为二进制可执行文件后的大小关系。
答:这个问题与编译器关系,以及编写汇编、C语言人的水平有很大的关系,一般情况下我们认为:占用磁盘空间(C语言>汇编>大于二进制可执行文件)。
原因我就不具体说了。
+++++++++++如有错误,请多指教!++++++++++++++++++++++++++++
⑸ 在c语言中,每一个数组元素的内存是2个字节吗跪求!!!
当然不一定了,看你数组的类型了
char a[8] //每一个元素占一个字节
int i[8] //每一个元素占2个字节
每一个元素的大小就是数组类型的大小