lang内存分配

任何人都可以帮助我理解为什么Clang在生命周期相交时会为不同的变量重新分配相同的内存地址吗?

我正在使用示例程序(如下)显示问题。

当我使用clang -O0编译程序时,函数j中的变量ok与函数solutions中的变量nqueens具有相同的内存地址。

函数ok在函数nqueens内部被调用,这意味着变量的生存期相交;两种功能不能使用/重复使用相同的堆栈空间。

使用gcc上的clang-O1编译程序,但是,它们被分配了不同的内存地址。

感谢您的帮助!

#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <alloca.h>

/* Checking information */

static int solutions[] = {
  1,2,10,/* 5 */
  4,40,92,352,724,/* 10 */
  2680,14200,73712,365596,};
#define MAX_SOLUTIONS sizeof(solutions)/sizeof(int)

int total_count;
int sharedVar = 0;

int ok(int n,char *a)
{
  int i,j;
  char p,q;
  printf("jjjjjjjjj: %d,%p\n",n,&j);
  for (i = 0; i < n; i++) {
    p = a[i];


    for (j = i + 1; j < n; j++) {
      q = a[j];
      if (q == p || q == p - (j - i) || q == p + (j - i))
    return 0;
    }
  }
  return 1;
}

void nqueens (int n,int j,char *a,int *solutions)
{
  int i,res;
  sharedVar = sharedVar * j - n;
  if (n == j) {
    /* good solution,count it */
    *solutions = 1;
    return;
  }
  printf("solutions: %d,j,&solutions);
  *solutions = 0;

  /* try each possible position for queen <j> */
  for (i = 0; i < n; i++) {
    a[j] = (char) i;
    if (ok(j + 1,a)) {
      nqueens(n,j + 1,a,&res);
      *solutions += res;
    }
  }
}

int main()
{
  int size = 3;
  char *a;
  // printf("total_count: %p\n",&total_count);
  total_count=0;
  a = (char *)alloca(size * sizeof(char));
  printf("Computing N-Queens algorithm (n=%d) ",size);
  sharedVar = -5;
  nqueens(size,&total_count);
  printf("completed!\n");
  printf("sharedVar: %d\n",sharedVar);
}
gba30000 回答:lang内存分配

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3029199.html

大家都在问