C / C ++: sizeof (krótki), sizeof (int), sizeof (długi), sizeof (długi), itd ... na maszynie 32-bitowej w porównaniu z maszyną 64-bitową
Używam Windows 7 (64-bit).
To pytanie dotyczy tego samego pytania:
długo na komputerze 64-bitowym
ale jest bardziej dogłębny, ponieważ zajmuje się jeszcze większą liczbą typów danych i dotyczy C lub C ++, a nie C #. Przede wszystkim korzystam z Microsoft Visual Studio Ultimate 2012. Niestety, podczas gdy to IDE obsługuje C # i Visual C ++, nie obsługuje już zwykłego starego Visual C. W każdym razie próbowałem utworzyć następujący standardowy program C ++ w IDE:
#include <cstdio>
int main(int argc, char **argv) {
printf("sizeof(short): %d\n", (int) sizeof(short));
printf("sizeof(int): %d\n", (int) sizeof(int));
printf("sizeof(long): %d\n", (int) sizeof(long));
printf("sizeof(long long): %d\n", (int) sizeof(long long));
printf("sizeof(size_t): %d\n", (int) sizeof(size_t));
printf("sizeof(void *): %d\n", (int) sizeof(void *));
printf("Hit enter to exit.\n");
char *scannedText;
scanf("%s", &scannedText);
return 0;
}
a ponieważ nie mogłem znaleźć opcji uruchomienia aplikacji konsolowej, po prostu umieściłem punkt przerwania przy „return 0”; instrukcja, tak aby wyświetlić wyjście w konsoli. Wynik był:
sizeof(short): %d\n", 4
sizeof(int): %d\n", 4
sizeof(long): %d\n", 4
sizeof(long long): 8
sizeof(size_t): 4
sizeof(void *): 4
Hit enter to exit.
Stare podręczniki C stwierdzają, że int jest ustawione na „rozmiar słowa”, który wynosi 16 na maszynach 16-bitowych i 32 na maszynach 32-bitowych. Jednak ta reguła wydaje się łamać w systemach 64-bitowych, gdzie można oczekiwać, że „rozmiar słowa” będzie wynosił 64. Zamiast tego z tego, co przeczytałem, systemy te są jak systemy 32-bitowe, ale mają lepszą obsługę obliczeń 64-bitowych niż ich 32-bitowe odpowiedniki tak. W związku z tym wyniki uzyskane z powyższego programu C ++ są dokładnie takie same, jak w przypadku systemu 32-bitowego. Rozmiar typów danych (size_t) (który może być użyty do pomiaru ilości pamięci zajmowanej przez obiekty w pamięci) również przechowuje swoje wartości w 4 bajtach, a także interesujące jest, że rozmiar wskaźników używanych do uzyskania dostępu do lokalizacji pamięci (dla instancja sizeof (void *) pokazuje liczbę bitów używanych do przechowywania ogólnych wskaźników do dowolnej lokalizacji w pamięci). Ma również długość 32 bitów.
Każdy wie, jak to się stało, że Visaul C został usunięty z Visual Studio 2012 i czy nadal można uruchamiać aplikacje konsolowe z Visual Studio 2012 bez konieczności ustawiania punktu przerwania lub czytania tekstu ze standardowego wejścia przed wyjściem jak wyżej, aby okno konsoli było wstrzymać przed zamknięciem?
Co więcej, czy moja interpretacja jest poprawna, czy też mam coś źle skonfigurowanego w IDE, tak że na przykład kompiluje się raczej dla systemów 32-bitowych niż dla systemów 64-bitowych? Według jednego z plakatów, ponieważ mój system jest 64-bitowy, powinienem zobaczyć wyniki opisane tutaj dla size_t i wskaźników:https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models ale tego nie widzę. Czy istnieje sposób rekonfiguracji programu Visual Studio, aby mógł obsługiwać 64-bitowy model pamięci, w przeciwieństwie do tego, co obecnie widzę w wynikach programu?
Dzięki.