리눅스의 GCC 컴파일 된 C 프로그램에서 힙 시작 주소를 설정하는 방법이 있습니까? x86_64 시스템에서 테스트 프로그램은 힙 주소를 4 바이트 참조 주소 (FFFFFFFF 미만)로 설정합니다. 일부 테스트 (> FFFFFFFF) 8 바이트 참조 된 주소로 설정하고 싶습니다. GCC는 힙 시작 주소를 설정하는 방법을 제공합니까?C 프로그램에서 힙 시작 주소를 설정 하시겠습니까?
답변
당신은 조금 간접적으로 sbrk()
를 사용하여이 작업을 수행 할 수 있습니다 malloc()
할당 할 수있는 다음 일은 더 높은 주소되도록 0xFFFFFFFF로는, 매우 시작에서 바이트이 "할당"에 의해 작동
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
sbrk(0xFFFFFFFF);
printf("%p\n", malloc(1));
return 0;
}
합니다.
대부분의 malloc은 점점 더 많은 mmap을 사용하고 있기 때문에 언제나 작동하지 않을 수도 있습니다. 사실,'sbrk' 또는 힙 시작은 오늘날 많이 사용되지 않습니다 (특히 멀티 쓰레드가 아니기 때문에) –
@BasileStarynkevitch :'sbrk()'를 사용하면 모든 가상 주소를 효과적으로 0 이상의 비트부터 0xFFFFFFFF까지 예약합니다 . 따라서 mmap()은 malloc()이 OP가 요청한대로 높은 주소를 리턴 할 수 밖에 없습니다. 반례가 있습니까? 위의 코드에서 mmap()을 사용하도록 만든 몇 메가 바이트가되도록 malloc() 크기를 변경해 보았습니다. 그러나 주소는 0xFFFFFFFF보다 작았습니다. –
@ 존 Zwinck 글쎄, 그것은 주소 0에서 예약하지 않습니다, 그것은 현재 데이터 세그먼트가 시작 어디에서 예약합니다 - 거기에 물건을 많이 낮은 주소에 매핑 될 수 있습니다. 이론적으로 malloc 구현은 할당 할 어딘가에 매핑에 구멍을 찾을 수 있습니다. – nos
- 1. 응용 프로그램에서 iPhone 설정 화면을 시작 하시겠습니까?
- 2. C++ 프로그램에서 IE 시작
- 3. C 프로그램에서 함수의 끝 주소를 찾는 방법?
- 4. C# : 시작 시간 설정
- 5. Java 프로그램에서 C++ 프로그램 시작
- 6. C# 프로그램에서 VLC로 스트림 시작
- 7. C++ : std :: vector의 시작 주소를 얻는 중입니까?
- 8. 런타임시 JVM 힙 크기 설정
- 9. C 프로그램에서 호스트의 IP 주소를 출력하려면 어떻게합니까?
- 10. 버디 할당 알고리즘 - 시작 힙 주소
- 11. 창으로 프로그램 시작 하시겠습니까? C#
- 12. C# 설정 양식 2는 C#에서 시작
- 13. 톰캣의 힙 크기 설정
- 14. 새 활동을 시작 하거나ContentView를 설정 하시겠습니까?
- 15. 피커, 시작/기본 행을 설정 하시겠습니까?
- 16. 목표 C : 라우터 주소를 검색 하시겠습니까?
- 17. MVC 응용 프로그램에서 변수를 설정 하시겠습니까?
- 18. 내 응용 프로그램에서 힙 덤프를했다
- 19. 시작 하시겠습니까?
- 20. Mac 응용 프로그램에서 사파리 시작
- 21. 내 안드로이드 응용 프로그램에서 안드로이드 IP 주소를 설정
- 22. C++ 응용 프로그램에서 프로세스 시작 및 처리
- 23. 외부 C# 프로그램에서 Chrome 확장 프로그램 시작
- 24. Jpanel 프로그램에서 Jframe의 크기를 설정 하시겠습니까? JPanel의 프로그램에서
- 25. DCOM에서 원격 시작 설정
- 26. 내 안드로이드 응용 프로그램에서 DHCP를 사용하여 프로그래밍 방식으로 IP 주소를 설정 하시겠습니까?
- 27. 주 시작 주소를 결정하는 방법
- 28. 데이터 배열의 시작 주소를 반환하십시오.
- 29. 시작 응용 프로그램 시작 응용 프로그램에서 항상
- 30. wp7의 설정 시작 프로그램
"힙 시작 주소"가 무엇인지 정의하십시오. 대부분의 malloc은 mmap을 사용하고 있습니다. (그리고 ASLR (https://en.wikipedia.org/wiki/Address_space_layout_randomization) ...) –
왜 물어 보시겠습니까? 너 왜 신경 쓰냐? –
힙이 4 바이트 이상일 때 일어나는 것 같은 크래시를 디버깅 중입니다. 정수 할당에 대한 포인터 때문에이 문제가 발생할 수 있습니다. 하지만 내 테스트 프로그램은 항상 4 바이트의 주소 공간을 가지고있다. – kumar