int 형식의 메서드를 만들 때 컴파일러는 X 비트의 메모리를 메모리에 예약합니다. 그럼 void 타입을 어떻게 보입니까? void 타입이 몇 비트/바이트를 차지합니까?void를 사용하면 메모리에 어떤 데이터 유형이 표시됩니까?
답변
공백 유형은 비트를 취하지 않습니다. void 유형의 변수를 선언 할 수 없습니다. 이 :
void a;
컴파일 오류가 발생합니다.
void는 "아무것도"를 의미하는 자리 표시 자입니다. void를 반환하는 함수는 아무 것도 반환하지 않으며 인수로 void를 사용하는 함수는 인수를 사용하지 않습니다.
당신은 그러나 형 무효 *의 변수를 선언 할 수는 :
void* a;
이것은 단순히 어떤 일이든 무엇이든 가리킬 수 있습니다 포인터를 선언합니다. 임의의 포인터로서 포인터 유형의 크기, 즉 32 비트 시스템에서 전형적으로 4 인 sizeof (void *)의 크기를 취한다.
나는 그가 변수에 대해 이야기하고 있다고 생각하지 않지만, 기능 서명을한다. – MStodd
나는 컴파일러가 반환 값을 저장하는 방법을 너무 일반적인 것으로 생각한다고 생각한다. 반환 값은 언어, 유형 및 하드웨어에 따라 결정됩니다.
리턴 값을 보유 할 수있는 '리턴 레지스터'가있을 수 있으므로 메모리가 차지하지 않습니다. 'return register'는 반환되는 타입에 따라 메모리에 할당 된 일부를 가리킬 수도 있습니다.
void를 반환하는 함수가 반환 값에 대한 메모리를 할당 한 적이없는 이유가 표시되지 않습니다.
C 또는 C++에는 void 형식이 없습니다 (C#에 대해서는 아무것도 모릅니다). void *는 타입이없는 포인터입니다.
이 약간의 도움이 될 수 있습니다 http://c-faq.com/ansi/voidparith.html나는 그가 변수에 대해 이야기하고 있다고 생각하지 않지만, 기능 서명을하고있다. – MStodd
malloc은 void를 반환합니다 * ... 이것은 호출로 할당 된 메모리 영역에 대한 일반적인 포인터입니다. C에서는 void *에서 다른 포인터 유형으로 자동 변환됩니다. 반환 된 포인터가 가리키는 메모리의 크기는 malloc에 대한 인수로 지정된 크기입니다. 여전히 void 데이터 형식이 없습니다. 인수 목록에서 사용되며 함수가 인수를 사용하지 않도록 지정합니다. –
그냥 정의되지 않은 포인터 타입, 그래서 크기는 당신이 그것을 만들 시스템의 다른 포인터의 크기입니다.
(gcc 3.4.6을 사용하는) x86 아키텍처에서 int 함수의 반환 값은 eax 레지스터에 저장됩니다. 부동 소수점 숫자는 XMM 레지스터 또는 ST0을 통해 반환됩니다. [편집 : Bastien Leonard에게 감사드립니다.]
void 함수는 단순히 eax에 아무것도 넣지 않고 리턴합니다. F2와
main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
subl %eax, %esp
call f1
movl %eax, -4(%ebp)
call f2
call f3
fstpl -16(%ebp)
movl $0, %eax
leave
ret
.size main, .-main
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.4.6"
정의 :
f2:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
subl $12, %esp
pushl $.LC1
call printf
addl $16, %esp
leave
ret
.size f2, .-f2
및 F1 정의 :
f1:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
subl $12, %esp
pushl $.LC0
call printf
addl $16, %esp
movl $9, %eax
leave
ret
을 다른 사람이 상이한 코드를 받으면 GCC가 -S와
#include <stdio.h>
int f1(void)
{
printf("f1\n");
return 9.0f;
}
void f2(void)
{
printf("f2\n");
}
double f3(void)
{
return 10.0;
}
int main(void)
{
int x = f1();
f2();
double y = f3();
return 0;
}
빌드 흥미있는 다른 버전의 gcc XD를 볼 수 있습니다 (어쩌면 다른 상황에서 int 함수가 스택에 리턴합니다 ...)
모든 구현에서 void 함수가 아무 것도 반환하지 않는다고 생각합니다. 그것은 반환 레지스터를 홀로 남겨두고 스택에 아무것도 남기지 않습니다.
함수가 void
을 반환하면 호출자는 반환 값을 기대하지 않으므로 할당 할 필요가 없습니다. void
은 반환 될 실제 형식이 아니므로이 함수가 아무 것도 반환하지 않는다는 것을 컴파일러에 알리는 것이 좋습니다.
PC에서 함수는 특정 레지스터 (eax
)에 배치하여 int
과 같은 간단한 값을 반환합니다. 컴파일러는이 값을 검색하기위한 적절한 코드를 생성하기 만하면됩니다. 함수가 void
을 반환하면 컴파일러는 이러한 종류의 코드를 생성하지 않습니다.
다른 아키텍처에서는 호출자가 암시 적으로 반환 값이 배치 될 int
을 가리키는 매개 변수를 전달할 수 있습니다.
이러한 종류의 하위 수준 항목은 C 및 C++ 표준에 의해 지정되지 않습니다. 그것은 다른 표준에 의해 지정 될 수도 있고 단지 대회 일 수도 있습니다.
C#의 경우 응답 값이 CIL 인 방법에 대한 답이 있다고 생각합니다.
- 1. 어떤 파일은 루트에만 표시됩니까?
- 2. 기능에는 어떤 유형이 있습니까?
- 3. 어떤 종류의 정보를 메모리에 캐시합니까?
- 4. 어떤 DLL이 메모리에 있는지 확인합니다.
- 5. SharePoint보기를 사용하면 현재 달만 자동으로 표시됩니까?
- 6. 사운드 스트림이 메모리에 표시되는 방법과 하드 디스크에서 어떻게 표시됩니까?
- 7. 어떤 인코딩 유형이 사용되고 있습니까?
- 8. 데이터 유형이 왜 중요합니까?
- 9. XSD - 데이터 유형이 누락되었습니다.
- 10. 안녕하세요, 찾고있는 데이터 유형이 무엇입니까?
- 11. AS3에서 void를 사용하는 이유
- 12. 블랙 베리 메모리에 데이터 저장
- 13. C# 및 메모리에 데이터 저장
- 14. 데이터베이스 디자인 - 여러 개의 객체 유형이 계층 구조로 표시됩니까?
- 15. 방화 광 단추를 사용하면 js 오류가 어디에 표시됩니까?
- 16. iPhone 앱 배포 : AppStore에는 어떤 이름이 표시됩니까?
- 17. 데이터를 메모리에 미리로드하는 것은 어떤 장점이 있습니까?
- 18. 데이터 센터에서 사설 클라우드를 사용하면 어떤 이점이 있습니까?
- 19. 기본 키 데이터 유형이 잘못되었습니다
- 20. Go에는 iterator 데이터 유형이 있습니까?
- 21. MSBuild를 사용하면 어떤 이점이 있습니까?
- 22. aspnet_membership을 사용하면 어떤 위험이 발생합니까?
- 23. sessionStorage를 사용하면 어떤 이점이 있습니까?
- 24. WCF를 사용하면 어떤 이점이 있습니까?
- 25. Subversion을 사용하면 어떤 이점이 있습니까?
- 26. FileReader를 사용하면 마지막 줄의 텍스트 파일 만 표시됩니까?
- 27. 어떤 파일 유형이 BOSS 7로 시작합니까?
- 28. 주어진 유형이 어떤 인터페이스를 구현하는 경우 어떻게해야합니까?
- 29. 이미지를 SQL Server에 업로드 할 수 있도록이 데이터 형식에는 어떤 데이터 유형이 필요합니까?
- 30. VBA에서 클래스를 사용하면 어떤 이점이 있습니까?
함수에서 반환 값에 대해 이야기하고 있습니까? – MStodd
아무도 그 질문을 읽지 못했습니까? 그는 'int 형의 메소드'라고 말합니다. 'int를 반환하는 메소드'를 의미한다고 가정합니다. 그는 무효 포인터가 얼마나 많은 공간을 차지하는지 묻지 않습니다. 명확히하십시오. – MStodd