Vladimir Simakov: Além disso, as inserções de montadores também são muito utilizadas.
Eu o retiro parcialmente, assisto a partir das 18:00, sim, eles não escrevem de forma sigilosa, mas corrigem o código já compilado - então é lógico
tanto quanto eu entendo o que os compiladores modernos com inserções assembler fazem é apenas uma imitação de asm, ou seja, não é certo que a inserção de asm em tal forma entre no código compilado, e para realmente otimizar em código asm o suficiente para reescrever seções de código em asm no depurador - imho
há áreas de memória e há ponteiros para as áreas de memória armazenadas em outras áreas de memória
e depois há uma hierarquia, desde que o cérebro possa perceber
Sim, e também é legal não ficar sabendo se um link está vivo ou não e rastejar para uma longa seção de memória liberada que já é usada por outro processo e quebrar tudo lá))))
Sim, e também é legal não rastrear quando um link está vivo ou não e rastejar para um longo espaço de memória liberado, que já é usado por outro processo e quebrar tudo lá))))
Que conto de fadas, isto só foi possível no Windows 3.*. O Windows não deixará você entrar na memória de processo de outra pessoa, cada processo funciona em sua própria área, e para ele o endereçamento de memória começa do zero, é assim que é apresentado a ele pelo Windows. E em geral, o Windows aloca memória somente quando realmente escreve dados. Faça um arraste duplo [1024*1024*1024] e veja quanta memória está realmente alocada no Task Manager. Mas não de jeito nenhum! Até que você realmente comece a escrever para a matriz, a memória não será alocada em blocos de 4Kb. Mesmo que você o escreva usando índices aleatórios, ele ainda estará em tais pedaços. Como o Windows virtualiza tudo isso é insondável para mim!
Como o Windows virtualiza tudo isso é insondável para mim!
Não quero pesquisar no Google, mas com o advento do Pentium-1 o processador tem descritores de segmento de memória e memória virtual, ou seja, muito provavelmente é uma virtualização de nível de hardware, e o Windows usa-o habilmente
Que conto de fadas, isto só foi possível no Windows 3.*. O Windows não deixará você entrar na memória de processo de outra pessoa, cada processo funciona em sua própria área, e para ele o endereçamento de memória começa do zero, é assim que é apresentado a ele pelo Windows. E em geral, o Windows aloca memória somente quando realmente escreve dados. Faça um arraste duplo [1024*1024*1024] e veja quanta memória está realmente alocada no Task Manager. Mas não de jeito nenhum! Até que você realmente comece a escrever para a matriz, a memória não será alocada em blocos de 4Kb. Mesmo que você o escreva usando índices aleatórios, ele ainda estará em tais pedaços. Como o Windows virtualiza tudo isso é insondável para mim!
Falha de página. A exceção foi um golpe - eles deram memória por página, nada mais. Isto é conveniente e transparente para aplicações, mas leva à fragmentação da memória. Você pode alocar memória física de uma só vez se você chamar o virtuallock no ponteiro resultante após o virtualalloc. A propósito, é um buraco interessante, terei que ver se é possível travar o servidor dessa forma.
Três não tinham virtualização, é um sistema diferente, não NT. Havia muitas caudas de DOS lá dentro, metade das funções do sistema estavam articuladas no 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].
*/typedefstruct 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;
Além disso, na f-i há uma mudança no tamanho da matriz 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);
elseif (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:
returnNULL;
}
Ou seja, como eu entendo, toda essa bagunça é apenas para alocar memória para a matriz, mas ela não está cheia de valores? Portanto, este código pode ser jogado fora por mql (bem, após determinar o número de linhas e o mesmo número de colunas da matriz quadrada)
typedefstruct 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)); а здесь идет просто выделение памяти для матриы М?
Além disso, há uma mudança no tamanho da matriz M no f-i:
Ou seja, como eu entendo, toda essa bagunça é apenas para alocar memória para a matriz, mas ela não está cheia de valores? Portanto, este código pode ser jogado fora por mql (bem, após determinar o número de linhas e o mesmo número de colunas da matriz quadrada)
ou, afinal de contas, a matriz é inicializada com alguns valores
Nomeu_ponto*m é um ponteiro a int, e o comentário diz que é uma matriz, então cada linha tem um número diferente de colunas, é chamada de "matriz de pente" e não retangular.
score->m = (int *) malloc(score->n * sizeof(int))
Ele simplesmente aloca memória para este conjunto de comprimentos de linha, sem valores
há áreas de memória e há ponteiros para as áreas de memória armazenadas em outras áreas de memória
e depois há uma hierarquia, desde que o cérebro possa perceber
Além disso, as inserções de montadores também são muito utilizadas.
Eu o retiro parcialmente, assisto a partir das 18:00, sim, eles não escrevem de forma sigilosa, mas corrigem o código já compilado - então é lógico
tanto quanto eu entendo o que os compiladores modernos com inserções assembler fazem é apenas uma imitação de asm, ou seja, não é certo que a inserção de asm em tal forma entre no código compilado, e para realmente otimizar em código asm o suficiente para reescrever seções de código em asm no depurador - imho
há áreas de memória e há ponteiros para as áreas de memória armazenadas em outras áreas de memória
e depois há uma hierarquia, desde que o cérebro possa perceber
Sim, e também é legal não ficar sabendo se um link está vivo ou não e rastejar para uma longa seção de memória liberada que já é usada por outro processo e quebrar tudo lá))))
Sim, e também é legal não rastrear quando um link está vivo ou não e rastejar para um longo espaço de memória liberado, que já é usado por outro processo e quebrar tudo lá))))
Que conto de fadas, isto só foi possível no Windows 3.*. O Windows não deixará você entrar na memória de processo de outra pessoa, cada processo funciona em sua própria área, e para ele o endereçamento de memória começa do zero, é assim que é apresentado a ele pelo Windows. E em geral, o Windows aloca memória somente quando realmente escreve dados. Faça um arraste duplo [1024*1024*1024] e veja quanta memória está realmente alocada no Task Manager. Mas não de jeito nenhum! Até que você realmente comece a escrever para a matriz, a memória não será alocada em blocos de 4Kb. Mesmo que você o escreva usando índices aleatórios, ele ainda estará em tais pedaços. Como o Windows virtualiza tudo isso é insondável para mim!
Como o Windows virtualiza tudo isso é insondável para mim!
Não quero pesquisar no Google, mas com o advento do Pentium-1 o processador tem descritores de segmento de memória e memória virtual, ou seja, muito provavelmente é uma virtualização de nível de hardware, e o Windows usa-o habilmente
Que conto de fadas, isto só foi possível no Windows 3.*. O Windows não deixará você entrar na memória de processo de outra pessoa, cada processo funciona em sua própria área, e para ele o endereçamento de memória começa do zero, é assim que é apresentado a ele pelo Windows. E em geral, o Windows aloca memória somente quando realmente escreve dados. Faça um arraste duplo [1024*1024*1024] e veja quanta memória está realmente alocada no Task Manager. Mas não de jeito nenhum! Até que você realmente comece a escrever para a matriz, a memória não será alocada em blocos de 4Kb. Mesmo que você o escreva usando índices aleatórios, ele ainda estará em tais pedaços. Como o Windows virtualiza tudo isso é insondável para mim!
Três não tinham virtualização, é um sistema diferente, não NT. Havia muitas caudas de DOS lá dentro, metade das funções do sistema estavam articuladas no int 21.
Este caso não é claro:
Além disso, na f-i há uma mudança no tamanho da matriz M:
Ou seja, como eu entendo, toda essa bagunça é apenas para alocar memória para a matriz, mas ela não está cheia de valores? Portanto, este código pode ser jogado fora por mql (bem, após determinar o número de linhas e o mesmo número de colunas da matriz quadrada)
ou a matriz é inicializada com alguns valores
...Como o sistema eólico virtualiza tudo isso é insondável para mim!
Leia Richter. Ele tem tudo mastigado a ponto de machucar seu coração.
SeriousRacoon:
A propósito, buraco interessante, terei que ver se é possível travar o servidor dessa forma
Você não pode.
Este caso não é claro:
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)); а здесь идет просто выделение памяти для матриы М?Além disso, há uma mudança no tamanho da matriz M no f-i:
Ou seja, como eu entendo, toda essa bagunça é apenas para alocar memória para a matriz, mas ela não está cheia de valores? Portanto, este código pode ser jogado fora por mql (bem, após determinar o número de linhas e o mesmo número de colunas da matriz quadrada)
ou, afinal de contas, a matriz é inicializada com alguns valores
Nomeu_ponto*m é um ponteiro a int, e o comentário diz que é uma matriz, então cada linha tem um número diferente de colunas, é chamada de "matriz de pente" e não retangular.
score->m = (int *) malloc(score->n * sizeof(int))Ele simplesmente aloca memória para este conjunto de comprimentos de linha, sem valores
Para a própria matriz M.
aqui é alocada memória para apontadores de filas
score->M[i] = (double *) malloc ((score->m[i]) * sizeof(double)); а здесь идет просто выделение памяти для матриы М?e aqui para as colunas