您的位置:首页 > 其它

用内存占用曲线画正弦波

2016-02-19 21:11 411 查看
    今天突然想起原来看用cpu使用率曲线画正弦波,于是打算换个思路用内存占用率画正弦波形。

    主要用到malloc函数和free函数来操作内存。

    

    毕竟我不是ACMer所以就中规中矩的写。

    首先实现矩形波。

    首先找找思路,先写函数接口,这是一个很好的编程习惯。

    那么就:

    

int occupy_Mbyte( int size,const int delay_time,const int wait_time)


    size是分配空间大小,单位是M,这个参数可以调整;delay_time是每分配1M的延时,这样可以调整波形的胖瘦,wait_time是每次分配完波形的持续时间,这个参数在正弦波的时候有用,在产生正弦波的时候设置为0就可以了,因为正弦波的变化本身就提供了持续时间。

 然后写主函数调用:

  

int main()
{
long int i = 0;

for( i=0;i<20;i++){
if(i%2 == 0){
occupy_Mbyte(1024,0,50000);
}else{
Sleep(50000);
}
}
return 0;
}


  这样的主函数应该能产生脉宽10s,占空比50%的矩形波。

  接下来就要实现occupy_Mbyte函数了

  


int occupy_Mbyte( int size,const int delay_time,const int wait_time)
{
long int i = 0;

for( i=0;i<size * 1024;i++ ){
p[i] = malloc(1024);

if(i%1024 == 0){
Sleep(delay_time);
}
}

Sleep(wait_time);
for( i=0;i<size * 1024;i++ ){
free(p[i]);
}
}


其中p数组是定义为全局数组

int *p[1024 * 1024] = {0};


这个数组每个单元存储malloc分配的一个1024B也就是1K的内存单元的指针,那么整个数组就可以管理1G的内存分配。

我们试着运行一下看看结果。



  呵呵,ok!

  下来我们要用一用math头文件里面的三角函数函数了..

嗯,夜深了,不详细写了,贴结果了。只是需要注意的地方就是内存的管理了。我的结果其实有些问题的,看波形就能看出来。。

  

#include <stdio.h>
#include <malloc.h>
#include <windows.h>
#include <math.h>

#define Pi 3.1415

int curr_size = 0;

int *p[1024 * 1024 * 2] = {0};

int main()
{
long int i = 0;
double value = 0.0,
x = -(Pi/2);

for( ; ; ){
for(; x < Pi/2.0;x += 0.1){

value = sin(x) + 1.0;
occupy_Mbyte((int)(value * 1024),0,3000);
}

for(; x<(2.0 * Pi);x += 0.1){
value = sin(x) + 1.0;
free_occupy((int)(value * 1024),0,3000);
}

curr_size = 0;
x = -(Pi/2);
value = 0.0;
i = 0;
}
return 0;
}

int occupy_Mbyte( int size,const int delay_time,const int wait_time)
{
int i = size;
for( ;curr_size<size * 1024;curr_size++ ){
p[curr_size] = malloc(500);

if(curr_size%1024 == 0){
Sleep(delay_time);
}
}

Sleep(wait_time);
}

int free_occupy( int size,const int delay_time,const int wait_time)
{
long int a = size * 1024;
while( curr_size >= a){
free(p[curr_size]);
curr_size --;
Sleep(delay_time);
}
curr_size ++;
Sleep(wait_time);
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: