zoukankan      html  css  js  c++  java
  • 用内存占用曲线画正弦波

        今天突然想起原来看用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;
    }

  • 相关阅读:
    题解——洛谷P3812【模板】线性基
    题解——洛谷P2781 传教(线段树)
    题解——洛谷P1962 斐波那契数列(矩阵乘法)
    题解——洛谷P3390 【模板】矩阵快速幂(矩阵乘法)
    题解——牛客网OI赛制测试赛2
    题解——code[vs] 1506 传话(传递闭包)
    题解——Codeforces Round #508 (Div. 2) T3 (贪心)
    题解——Codeforces Round #508 (Div. 2) T2 (构造)
    题解——Codeforces Round #508 (Div. 2) T1 (模拟)
    题解——Codeforces Round #507 (based on Olympiad of Metropolises) T2(模拟)
  • 原文地址:https://www.cnblogs.com/zhangte/p/5202194.html
Copyright © 2011-2022 走看看