关于CBC XE7内存分配,请教各位

老顽童 2015-01-03 11:36:53
看各种资料,说:
第一,Heap是指堆,用户自己new和delete 。CBC XE7能设置到2G。
第二,stack是指栈,系统自动分配。CBC XE7能设置到2G。


请教:
非类成员:static char buf[8000] 分配在哪?
类成员 : char buf[8000] 分配在哪?

TStringList 分配在哪?



我的问题来源是:有一个StringGrid排序,我把数据放TStringList 中,排序完再放回StringGrid,现在是数据少的时候正常,数据大的时候就不排序了。


...全文
167 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
老顽童 2015-01-03
  • 打赏
  • 举报
回复
算法就是普通的冒泡,ColCount=4 RowCount=209681 速度太慢太慢,求支援!!!!!!!!!!!!!! 数据改用动态数组没变化 算法改选择估计要快点,但无济于事啊
老顽童 2015-01-03
  • 打赏
  • 举报
回复
2015/1/3 12:27:34: 数据移动 i=1 j=1 2015/1/3 12:27:42: 数据移动 i=1 j=16055
老顽童 2015-01-03
  • 打赏
  • 举报
回复
神啊,99我吧,居然是速度很慢,内存没问题
老顽童 2015-01-03
  • 打赏
  • 举报
回复
感谢LinuxCard,学了这么多年程序设计,发现原来排序检索这才是基本功。
赵4老师 2015-01-03
  • 打赏
  • 举报
回复
VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533
LinuxCard 2015-01-03
  • 打赏
  • 举报
回复
栈一般都是2M吧,没有能到2G的吧 至于对象生存期和位置,可以看这里: http://www.xuebuyuan.com/536009.html TStringGrid排序貌似以前写过一个,当时也是东找西找的 找到了,贴出来给你,你参考一下,不过20万条数据的排序,总快不到哪去的


int TMainForm::compare(AnsiString val1,AnsiString val2,int datetype)
{
 int int1,int2;
 double  float1,float2;
int  errcode;
 
  if(datetype==0)
  { //文本比较
    return AnsiCompareText(val1,val2);
  }
  else if(datetype==1)
  {//整数比较
          try
          {
           int1=val1.ToInt();
           int2=val2.ToInt();
          }
          catch(...)
          {
             return 0;
          }
          if (int1>int2) return 1;
          else if (int1<int2) return -1;
          else return 0;
 }
 else if(datetype==2)
 {//浮点数比较
          try
          {
           float1=val1.ToDouble();
           float2=val2.ToDouble();
          }
          catch(...)
          {
             return 0;
          }
          if (float1>float2) return 1;
          else if (float1<float2) return -1;
          else return 0;
 }
 return 0;
}


void TMainForm:: Quicksort(TStringGrid *Grid, int *List,int ListLen,int min, int max,int sortcol,int datatype)
{
int  med_value ;
int  hi, lo, i ;

if(min>=max) return;
randomize();
  //随机取一个中值
  i = min + random(max - min + 1);
  med_value = List[i];
  List[i] = List[min]; //{ Swap it to the front so we can find it easily}
  //{Move the items smaller than this into the left
 //  half of the list. Move the others into the right}
  lo = min;
  hi = max;

  while (1)
  {
    // Look down from hi for a value < med_value.
    while( compare(Grid->Cells[sortcol][List[hi]],Grid->Cells[sortcol][med_value],datatype) >=0)
    //(*ANSIComparetext(Grid.cells[sortcol,List[hi]]
   //                      ,grid.cells[sortcol,med_value])>=0 do*)
   {
        hi--;
        if (hi <= lo) break;
    }
    if (hi <= lo)
    {// {We're done separating the items}
      List[lo] = med_value;
      break;
    }

    // Swap the lo and hi values.
    List[lo] = List[hi];
    lo++;// {Look up from lo for a value >= med_value}
    while (compare(Grid->Cells[sortcol][List[lo]], Grid->Cells[sortcol][med_value],datatype)<0)
    {
        lo++;
        if (lo >= hi)  break;
    }
    if (lo >= hi)
    { // {We're done separating the items}
      lo = hi;
      List[hi] = med_value;
      break;
    }
    List[hi] = List[lo];
  }
  //{Sort the two sublists}
  Quicksort(Grid,List, ListLen,min, lo - 1,sortcol,datatype);
  Quicksort(Grid,List,ListLen, lo + 1, max,sortcol,datatype);
}


void TMainForm::Sortgrid(TStringGrid *Grid,int sortcol)
{
  int i ;
  TStringGrid *tempgrid;
  int *List; //需要排序的行的序号
  int ListLen;
  bool bTotalRow=false;
  int datatype;//要排序数据的类型 0:按字符排序  1:按整型排序  2:按浮点型排序
     if (!Grid)       return ;
     if (Grid->RowCount <= 1)       return ;
     if (Grid->RowCount == 2 && Grid->Cells[0][Grid->RowCount - 1].Trim().Length() == 0)
         return ;
  //判断是否有合计项目
  for(int m=0;m<Grid->ColCount;m++)
  {
   if(Grid->Cells[m][Grid->RowCount-1].Pos("合计:")>0)
   {
    bTotalRow=true;
    break;
   }
  }
  Screen->Cursor=crHourGlass;
  datatype=GetColType(Grid,sortcol,bTotalRow);//获取列的数据类型
    //临时Grid,和原来的内容一致
    tempgrid=new TStringGrid(Application);
    tempgrid->RowCount=Grid->RowCount;
    tempgrid->ColCount=Grid->ColCount;
    tempgrid->FixedRows=Grid->FixedRows;

    ListLen=tempgrid->RowCount-tempgrid->FixedRows-(bTotalRow?1:0);
    List=new int[ListLen];
    int c=bTotalRow?tempgrid->RowCount-1:tempgrid->RowCount;
    for (i= 1;i<c;i++)
    {
      List[i-1]=i;
      tempgrid->Rows[i]=Grid->Rows[i];

      //TRACE("list[%d]:%d",i-1,i);
    }
    Quicksort(Grid, List,ListLen,0,Grid->RowCount-2-(bTotalRow?1:0),sortcol,datatype);
    bool basc;
    SetGridTitle(Grid, sortcol,basc);
    if(basc)
    {//顺序排列
      c=Grid->RowCount-1-(bTotalRow?1:0);
      for( i=0 ;i<c ;i++)
      {
        Grid->Rows[i+1]=tempgrid->Rows[List[i]];
      }
    }
    else
    {//逆序排列
      c=Grid->RowCount-1-(bTotalRow?1:0);
      for( i=0 ;i<c ;i++)
      {
        Grid->Rows[i+1]=tempgrid->Rows[List[tempgrid->RowCount-i-2-(bTotalRow?1:0)]];
      }

    }
    Grid->Row=Grid->FixedRows;

  tempgrid->RowCount=0;
  delete tempgrid;
  delete []List;
  Screen->Cursor=crDefault;
}



int TMainForm::GetColType(TStringGrid * Grid, int sortcol, bool bTotalRow)
{
    //判断1列的类型 0:按字符排序  1:按整型排序  2:按浮点型排序
 //判断数据类型
 bool bOK=true;
 AnsiString str;
 for(int m=Grid->FixedRows;m<(bTotalRow?Grid->RowCount-1:Grid->RowCount);m++)
 { //判断是否都是整数
      str=Grid->Cells[sortcol][m].Trim();
      try
      {
       str.ToInt();
      }
      catch(...)
      {
        bOK=false;
       break;
      }
 }
 if(bOK) return 1;
  for(int m=Grid->FixedRows;m<(bTotalRow?Grid->RowCount-1:Grid->RowCount);m++)
  {
   //判断是否都是浮点数
      str=Grid->Cells[sortcol][m].Trim();
      try
      {
       str.ToDouble();
      }
      catch(...)
      {
        bOK=false;
       break;

      }
  }
 if(bOK) return 2;
 else return 0;
}
课程亮点: 从无到有、手把手教你编写CA/TA,快速上手,快速部署项目标准的开发,开发一套CA/TA,可部署到不同的TEE OS上。受益人群: 汽车行业主机厂、tier1、SOC芯片公司的安全部门同事手机行业,ODM/OEM、SOC芯片公司的安全部门同事学生课程收益: 熟悉CA/TA开发的步骤和流程。快速上手,快速搭建自己开发环境。熟悉各类TEE、基于各类TEE的CA/TA开发步骤。搭建自己的安全平台熟悉各类常规安全应用熟悉tee密码学算法、tee存储  课程大纲  Hello大家好,上架一门新的视频课程,课程主要包含两大部分,第一部分搭建环境,第二部分从无到有的编写代码。带领大家手把手编写。 具体大纲如下:(1)qemu v8环境搭建- 搭建一个qemu_v8的环境,用于跑BL1-->BL2-->BL31-->BL32-->BL33-->Linux kernel;- 直接使用已搭建好的镜像- 工程使用以及说明(2)CA/TA开发编程实践从无到有编写代码,已完成的大纲如下:- 2秒钟快速编写(clone)一组CA/TA程序- 安全存储详解以及代码示例- CA到TA双向传参数的四种方式(value、temref、memref),区别?优缺点?- 对称密码学算法aes的使用,CBC/ECB/CTR/XTS分组密码的使用,加密解密,pending等- aeskey的操作,如何随机生成aeskey(TEE_GenerateKey),objectHandle和aesbuf有什么区别? 如何将handle- 认证加密算法,如aes-GCM的使用- 非对称密码学算法RSA的使用,包括加密、解密、签名、验签- RSA key的处理,包含如何生成RSA KEY,rsakey object如何转换成可见的数组,如何转换der,如何转换pem,反向又如何转换- ECC/ECDSA的使用- 国密sm2 sm3 sm4的使用.  其中sm4包含加密、解密、签名、验签等- encode和decode的实现- TA属性的定制以及API的使用- 数字摘要  SHA1 sha224 sha256 sha384 sha512等- 消息认证码 HMAC- TEE侧获取时间的函数有哪些(TEE_GetSystemTime、TEE_GetREETime),有什么区别?分别是怎样使用的? - 如何获取随机数(TEE_GenerateRandom)?- TA调用TA的示例和演示后续可能继续补充的如下(也欢迎大家提需求):- multi-session和multi-instance的使用- CA LOGIN flag的使用 

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧