关于SI语言的问题 - 页 8

 
 
Igor Makanu:

有内存区域,有存储在其他内存区域的内存区域的指针

然后,只要大脑能够感知,就会有一个等级制度。

 
Vladimir Simakov:
此外,装配人员的插入也非常多。

我部分收回,从18:00开始看,是的,他们不写asm,但修复已经编译的代码 - 那么它是合乎逻辑的。

据我所知,现代编译器与汇编器的插入所做的只是对asm的模仿,也就是说,在这样的形式下,asm的插入并没有进入编译后的代码,要真正优化asm代码,足以在调试器中重写asm的代码部分--IMHO。


 
Maxim Dmitrievsky:

有内存区域,有存储在其他内存区域的内存区域的指针

然后,只要大脑能够感知,就会有一个等级制度。

是的,而且不跟踪一个链接是否活着,爬到已经被另一个进程使用的长期释放的内存部分,破坏一切,这也很酷))))。

 
Vladimir Simakov:

是的,而且它也很酷,不会跟踪一个链接是否活着,也不会爬进一个早已释放的内存空间,而这个空间已经被另一个进程使用,并破坏一切))))。

真是一个童话,这只有在Windows 3.*中才能实现。Windows不会让你进入别人的进程内存,每个进程都在自己的区域工作,对它来说,内存寻址从零开始,这就是Windows对它的介绍。而一般来说,Windows只有在真正写入数据时才会分配内存。做一个数组 double arr[1024*1024*1024],看看任务管理器中实际分配了多少内存。但根本不是这样的!在你真正开始向数组写东西之前,内存不会以4Kb块的形式分配。即使你用随机的索引来写,它仍然会在这样的块中。Windows是如何将这一切虚拟化的,对我来说是深不可测的!

 
Alexey Volchanskiy:

Windows是如何将这一切虚拟化的,对我来说是深不可测的!

我不想去谷歌,但随着Pentium-1的出现,处理器有了内存段描述符和虚拟内存,也就是说,很可能是硬件级的虚拟化,而Windows巧妙地使用了它

 
Alexey Volchanskiy:

真是一个童话,这只有在Windows 3.*中才能实现。Windows不会让你进入别人的进程内存,每个进程都在自己的区域工作,对它来说,内存寻址从零开始,这就是Windows对它的介绍。而一般来说,Windows只有在真正写入数据时才会分配内存。做一个数组 double arr[1024*1024*1024],看看任务管理器中实际分配了多少内存。但根本不是这样的!在你真正开始向数组写东西之前,内存不会以4Kb块的形式分配。即使你用随机的索引来写,它仍然会在这样的块中。Windows是如何将这一切虚拟化的,对我来说是深不可测的!

页面故障。例外情况是一个重创--他们给每页的内存,没有别的。这对应用程序来说是方便和透明的,但它导致了内存碎片化。如果你在virtualalloc之后对产生的 指针调用virtuallock,你就可以一举分配物理内存了。顺便说一句,这是个有趣的洞,我得看看是否有可能通过这种方式让服务器崩溃。


三号没有虚拟化,它是一个不同的系统,不是NT。那里面有很多DOS的尾巴,一半的系统功能都依赖于int 21。

 

这个案例并不清楚。

/*
 * The mine_score structure describes the maximum normalized mutual information
 * scores (i.e. the characteristic matrix if est=EST_MIC_APPROX, the
 * equicharacteristic matrix instead). M[i][j] contains the score using a grid
 * partitioning x-values into i+2 bins and y-values into j+2 bins. m and M are
 * of length n and each M[i] is of length m[i].
 */
typedef struct mine_score
{
  int n;      /* number of rows of M */
  int *m;     /* number of cols of M[i] for each i */
  double **M; /* the (equi)characteristic matrix */
} mine_score;

此外,在f-i中,矩阵M的大小也有变化。

/*
* Returns an initialized mine_score structure. Returns NULL if an error
* occurs.
*/
mine_score *init_score(mine_problem *prob, mine_parameter *param) {   int i, j;   double B;   mine_score *score;   if ((param->alpha > 0.0) && (param->alpha <= 1.0))     B = MAX(pow(prob->n, param->alpha), 4);   else if (param->alpha >= 4)     B = MIN(param->alpha, prob->n);   else     goto error_score;   score = (mine_score *) malloc (sizeof(mine_score));   if (score == NULL)     goto error_score;   score->n = MAX((int) floor(B/2.0), 2) - 1; задали кол-во строк, ок   score->m = (int *) malloc(score->n * sizeof(int)); а кол-во столбцов тут чему равно? кол-ву строк?   if (score->m == NULL)     goto error_score_m;   for (i=0; i<score->n; i++)     score->m[i] = (int) floor((double) B / (double) (i+2)) - 1;   score->M = (double **) malloc (score->n * sizeof(double *));   if (score->M == NULL)     goto error_score_M;   for (i=0; i<score->n; i++)     {       score->M[i] = (double *) malloc ((score->m[i]) * sizeof(double)); а здесь идет просто выделение памяти для матриы М?       if (score->M[i] == NULL)         {           for (j=0; j<i; j++)             free(score->M[j]);           goto error_score_M_i;         }     }   return score;   error_score_M_i:     free(score->M);   error_score_M:     free(score->m);   error_score_m:     free(score);   error_score:     return NULL; }

也就是说,按照我的理解,这些乱七八糟的东西只是为了给矩阵分配内存,但它并没有填充任何数值?因此,对于mql来说,这段代码可以被抛出(好吧,在确定了方形矩阵的行数和相同的列数之后)。

或者用一些值对矩阵进行初始化

 
Alexey Volchanskiy:

......风控系统是如何将这一切虚拟化的,对我来说是深不可测的!

阅读里希特。他把这一切都嚼碎了,以至于伤害了你的心。

SeriousRacoon:
顺便说一下,有趣的洞,我得看看是否有可能以这种方式崩溃服务器

你不能。

 
Maxim Dmitrievsky:

这个案例并不清楚。

typedef struct mine_score
{
  int n;      /* number of rows of M */
  int *m;     /* number of cols of M[i] for each i */
  double **M; /* the (equi)characteristic matrix */
} mine_score;
  score->n = MAX((int) floor(B/2.0), 2) - 1; задали кол-во строк, ок
  score->m = (int *) malloc(score->n * sizeof(int)); а кол-во столбцов тут чему равно? кол-ву строк?
score->M[i] = (double *) malloc ((score->m[i]) * sizeof(double)); а здесь идет просто выделение памяти для матриы М?

此外,在f-i中,矩阵M的大小也有变化。

也就是说,按照我的理解,这些乱七八糟的东西只是为了给矩阵分配内存,但它并没有填充任何数值?因此,对于mql来说,这段代码可以被抛出(好吧,在确定了方形矩阵的行数和相同的列数之后)。

或者,毕竟矩阵是用一些值初始化的

mine_score 中,*m是一个int的指针,注释中说它是一个数组,所以每一行有不同的列数,它被称为 "梳状数组 "而不是矩形。

score->m = (int *) malloc(score->n * sizeof(int))

它只是为这个行长数组分配了内存,没有值

对于矩阵M本身。

score->M = (double **) malloc (score->n * sizeof(double *));

这里是分配给行的指针的内存

score->M[i] = (double *) malloc ((score->m[i]) * sizeof(double)); а здесь идет просто выделение памяти для матриы М?

和这里的专栏