⑴ 怎麼用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個位元組
每一個元素的大小就是數組類型的大小