목록 :
struct list{
int Id;
short Value;
struct list *next;
};
그래서 노드의 주소를 사용하여 (sizeof를 사용하지 않고) 목록의 크기를 찾고 싶습니다. 각 노드는 서로 24 바이트 씩 다릅니다. 이것은 제가이 목적으로 작성한 코드입니다.
struct list *tmp;
int sum=0;
for(tmp=ptr; tmp!=NULL; tmp=tmp->next){
sum = sum + tmp->next - tmp;
}
printf("\nThe size of the list in bytes is:%d", sum);
tmp 는 목록에 대한 포인터입니다. ptr 은 헤드를 가리키는 목록에 대한 포인터입니다. 나는 실행 내 code.When 나중에 ptr에 필요하기 때문에 내가 tmp를 사용하는 난이 얻을 위 : 바이트 목록의 크기가 : 143,132 ... . 매번 숫자는 다르지만 내가 원하는 것은 아닙니다.
그래서 노드의 주소를 사용하여 (sizeof를 사용하지 않고) 목록의 크기를 찾고 싶습니다.
당신은 이것을 할 수 없습니다. 목록의 인접 노드가 메모리에 공백없이 선형 적으로 배치된다는 보장은 없습니다.
그는 매번 다른 번호
메모리는 잠재적으로 각 실행마다 다른 주소에 할당되기 때문입니다.
각 노드는 서로 다릅니다 24 바이트
메모리가 각 노드에 인접하여 할당 되더라도 패킹 문제가있을 수 있습니다. 일반적인 실제 컴퓨터에서 발생할 가능성이없는 24 바이트 크기 (이 숫자는 4와 8로 나눌 수 있기 때문). 그러나 크기가 23 인 경우 할당 된 공간은 많은 아키텍처에서 반올림됩니다.
별도의 카운터 또는 인덱스를 유지하지 않는 한 연결 목록의 크기를 알 수있는 유일한 방법은 시작부터 끝까지 순회하는 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다