Académique Documents
Professionnel Documents
Culture Documents
CURSO:
LENGUAJE C
Contenido
1.FUNDAMENTOS DE C..................................................................................................................................4
1.1 ANTECEDENTES DE LENGUAJE C..........................................................................................................4
1.2CARACTERSTICAS. EL PORQUE DE SU POPULARIDAD...................................................................4
1.3PALABRAS RESERVADAS POR ANSI.........................................................................................................5
1.4ESTRUCTURA DE UN PROGRAMA..........................................................................................................5
1.4.1Partes......................................................................................................................................................6
1.4.2Reglas de mbito.....................................................................................................................................6
2.LOS TIPOS Y LAS ESTRUCTURAS DE CONTROL...............................................................................8
2.1TIPOS DE DATOS Y SU DEFINICIN........................................................................................................8
2.2MODIFICADORES DE VARIABLES...........................................................................................................8
2.2.1Modificadores tipo..................................................................................................................................8
2.2.2Modificadores de almacenamiento.........................................................................................................9
2.2.3Modificadores de acceso........................................................................................................................9
2.3CONSTANTES LITERALES.........................................................................................................................9
2.3.1Numricas enteras................................................................................................................................10
2.3.2Numricas flotantes..............................................................................................................................10
2.3.3Caracteres Ascii....................................................................................................................................10
2.3.4Cadenas.................................................................................................................................................11
2.4OPERADORES ............................................................................................................................................11
2.4.1Aritmticos............................................................................................................................................11
2.4.2Asignacin............................................................................................................................................12
2.4.3Relacionales..........................................................................................................................................12
2.4.4Lgicos..................................................................................................................................................12
2.4.5Sobre bits..............................................................................................................................................12
2.4.6Asociatividad y precedencia de los operadores....................................................................................13
2.5EXPRESIONES.............................................................................................................................................14
2.6CONVERSIN DE TIPOS EN LA ASIGNACIN.....................................................................................14
2.7CASTS...........................................................................................................................................................15
2.8-FUNCIONES BASICAS DE E/S ...............................................................................................................16
2.9ESTRUCTURAS CONDICIONALES.........................................................................................................21
2.9.1El if........................................................................................................................................................21
2.9.2El switch................................................................................................................................................22
2.9.3Programa muestra del uso del switch...................................................................................................23
2.10ESTRUCTURAS CCLICAS......................................................................................................................24
2.10.1La instruccin for...............................................................................................................................24
2.10.2La instruccin while...........................................................................................................................25
2.10.3La instruccin do/while......................................................................................................................25
2.10.4Programa muestra de diversas formas del for...................................................................................25
2.10.5Programa muestra del uso de while...................................................................................................26
3.FUNCIONES, APUNTADORES Y ESTRUCTURAS DE DATOS..........................................................29
3.1 FUNCIONES DEFINIDAS POR EL USUARIO........................................................................................29
3.1.1Tipos de parmetros en funciones........................................................................................................29
3.1.2Funciones que regresan valores ..........................................................................................................30
3.1.3La funcin especial main......................................................................................................................30
3.2FUNCIONES CON PARAMETROS VARIABLES.....................................................................................31
3.2.1Programa de ejemplo............................................................................................................................31
3.3DEFINICION DE ARREGLOS....................................................................................................................32
3.3.1Arrays normales....................................................................................................................................32
3.3.2Array multidimensionales.....................................................................................................................33
3.4MANEJO DE CADENAS DE CARACTERES.........................................................................................................34
3.4.1Funciones comunes para el manejo de cadenas...................................................................................34
3.5 CONCEPTOS DE APUNTADORES...........................................................................................................35
1* 2
2*
FUNDAMENTOS DE C
1.1
ANTECEDENTES DE LENGUAJE C
9* Existen una serie de caractersticas que hacen del lenguaje c, uno los mas usados
en el ambiente computacional, en cualquier nivel. Esas caractersticas son las
siguientes:
10* Lenguaje de nivel medio
11* Se considera as porque tiene algo de los dos extremos adyacentes;
caractersticas de los lenguajes de alto nivel, y caractersticas de los
ensambladores.
12* Sin embargo se extraaran caracterstica de los lenguajes de alto nivel
(principalmente la proteccin de mbito y abstraccin) as como el control
total del hardware que se puede tener en un ensamblador.
13* Es portable:
A.Rodriguez L.
16*
19*
22*
25*
1.3
14* Significa que si se tiene cuidado de seguir las normas ANSI, se puede
escribir cdigo que funcione en cualquier compilador que se precie de ser
compatible con ANSI; incluso en compiladores de otras plataformas.
15* Esta caracterstica puede ser tambin limitante, ya que las mejoras
particulares que un compilador agregue, no siempre son aceptadas por
otros, lo cual es un factor de peso al desarrollar aplicaciones.
El estndar ansi solo define 32 palabras clave
17* El tener menos palabras reservadas que aprender resulta interesante,
comparado con otros lenguajes en los cuales se tiene que aprender al
menos un centenar de palabras reservadas.
18* El inconveniente resulta que estas palabras reservadas no incluyen
procesos de E/S, los cuales se hacen a travs de funciones de la biblioteca
standard.
Es estructurado
20* Las caractersticas estructuradas de C no son tan amplias como las que
proporcionan lenguajes de alto nivel, que permiten incluso anidar
subrutinas.
21* En C solo se cuentan con subrutinas de tipo funcin, pero estas son
flexibles que no es necesario contar con otro tipo para trabajar en el
lenguaje.
Reemplazo de lenguajes ensambladores:
23* Se considera como un buen reemplazo de ensambladores, ya que
genera programas que son casi tan eficientes como los creados en
ensamblador.
24* Esto se debe a que muchos procesos que hacen lento el
funcionamiento de los lenguajes de alto nivel en C quedan a cargo del
programador.
Hecho para programadores profesionales
26* Se considera as, por que el programador debe de cuidar muchos
detalles de tipo tcnico que en los lenguajes de alto nivel, el compilador
controla automticamente.
PALABRAS RESERVADAS por ANSI
int
signed
typedef
while
long
sizeof
union
register
static
unsigned
return
struct
void
ESTRUCTURA DE UN PROGRAMA
1.4.1 Partes
<declaraciones de variables globales>
<declaraciones de cabeceras de funcin>
main()
{
< variables locales>
<conjunto de sentencias>
}
<subrutina1> ( <parmetros>)
{
<variables locales>
<conjunto de sentencias>
}
:
<subrutinaN> ( <parmetros>)
{
<variables locales>
<conjunto de sentencias>
}
A.Rodriguez L.
A.Rodriguez L.
2.1
41*
TIPO
VALORES
RANGO
BITS
char
1 carcter
-128 a 127
int
enteros
-32768 a 32767
16
float
flotantes cortos
32
double
flotantes largos
64
void
nulo
sin valor
42*
46*
MODIFICADORES DE VARIABLES
EQUIVALENCI
AS
B
I
T
S
RANGO
char
unsigned
char
signed short
int
signed char
-
8
8
-128 a 127
0 a 255
signed,
short,
int, signed short,
signed int, short
int
unsigned short,
unsigned,
unsigned int
long,
signed
long
unsigned long
1
6
-32768 A 32767
1
6
0 a 65535
3
2
3
2
3
2
6
4
-2,147483648 a
2147483647
0 a 4294967295
unsigned
short int
signed long
int
unsigned
long int
float
double
long double
8
0
A.Rodriguez L.
CONSTANTES LITERALES
62* Tiene la finalidad de declarar un valor fijo en el cdigo del programa, el cual
puede ser almacenado en una variable o puede ser usado como operando de una
expresin. A continuacin se enlistan los tipos de constantes literales.
2.3.1 Numricas enteras
63* Las constantes numricas enteras se colocan sin valor fraccional y pueden
expresarse en los siguientes sistemas numricos:
-Decimales P.E.: 9, 16, 3241
-Octales
P.E.: 012=10 dec. 076 =62 dec.
-Hexadecimales
P.E.: 0x12=18 de. 0x2f=47 dec.
64* El espacio que ocupa en memoria una constante literal por default es el mismo
que ocupara una variable tipo int.
65* Sin embargo se puede indicar que se desea que ocupe el espacio de un long
poniendo despus del valor entero una letra L .
66* Tambin se puede indicar que se desea un entero sin signo si se le agrega
despus del valor una letra U.
A.Rodriguez L.
10
Significado
bell
ff
cr
tab. Vertical
signo
interrogacin
comilla doble
Car
act
er
\b
\n
\t
\\
\
Significado
\0
nulo
backspace
cr+lf
tab. Horizontal
diagonal invertida
comilla simple
(terminador
11
OPERADORES
82* Lenguaje C cuenta con una rica variedad de operadores de diversos tipos, los
cuales se clasifican en : aritmticos, asignacin, relacionales, lgicos y sobre bits.
2.4.1 Aritmticos
+
,*
,/
,
%
+
,+
+
A.Rodriguez L.
signos unarios
multiplicacin,
modulo
-a, +a
divisin,
a*b, a/b,
a%b
suma y resta
a-b, a+b
incremento en 1
a++
(a=a+1)
a-(a=a - 1)
decremento en 1
12
multiplica y asigna
a*=b
(a=a*b)
a/=b
(a=a/b)
a+=b
(a=a+b)
a-=b
(a=a-b)
a<<=2
(a=a<<2)
a>>=2
(a=a>>2)
divide y asigna
suma y asigna
resta y asigna
2.4.3 Relacionales
>
>
=
<
<
=
=
=
!
=
mayor
mayor o igual
a>b
a>=b
menor
menor o igual
a<b
a<=b
igual
a==b
diferente
a!=b
!
&
&
negacin
and
2.4.4 Lgicos
A.Rodriguez L.
!a,
!(a<b)
a&&b,
(a<b)&&(b<c)
13
or
a||b,
(a<b)&&(b<c)
84*
Asociatividad
Tipo
Preced.
() [ ] . ->
Izq. a Der.
Agrupacin
Mayor
Arit. unarios
* / %
Izq. a Der.
Arit. multiplicativos
+ -
Izq. a Der.
Arit. aditivos
<< >>
Izq. a Der.
Despl. de bits
A.Rodriguez L.
14
Izq. a Der.
Relacional
== =
Izq. a Der.
Rel. igualdad
&
Izq. a Der.
And binario
Izq. a Der.
Xor Binario
Izq. a Der.
Or Binario
&&
Izq. a Der.
And logico
||
Izq. a Der.
Or lgico
?:
Der. a Izq.
Condicional
Asignacin
Menor
EXPRESIONES
Ejemplo:
A.Rodriguez L.
15
char ch;
int i;
float f;
double d;
resultado=ch / i + f * d - f + i
int
double
int
double
double
double
double
double
double
double
2.6
#include <stdio.h>
main()
{ int x=300;
char ch=300;
float f=30.5;
ch=x;
printf( %d\n,ch);
x=f;
printf( %d\n,x);
f=300/ch; printf( %f\n,f);
A.Rodriguez L.
/* Caso 1 da 44*/
/* Caso 2 da 30*/
/* Caso 3 da 6.00*/
16
printf( %f\n,ch);
/* Caso 4 da 40.00*/
}
95* En el caso 1 se toman los 8 bits menos significativos, no considerando el byte
alto por lo que los valores que pasen de 128 son truncados.
96* En el caso 2 se toma solo la parte entera de la variable float.
97* En los casos 3 da 6.00 en vez de 6.82 como debera, ya que como los dos
operadores son enteros (char e int) el resultado da un division entera.
98* En el caso 4 se convierten del char a flotante.
99* La siguiente tabla resume las conversiones al asignar valores de diferentes
tipos.
Destino
unsigned
char
char
char
char
short int
int
int
float
double
2.7
Fuent
e
char
short
int
int
long
int
long
int
long
int
float
double
long
double
Posible
perdida
de
informacin
Si valor > 127, dest. es
negativo.
Signo
El byte mas significativo
Los 3 bytes mas significativos
Los 3 bytes mas significativos
Los 2 bytes mas significativos
Parte fraccional y prob. mas
Precisin, se redondea valor
Precisin, se redondea valor
CASTS
A.Rodriguez L.
17
104* Las definicin de las funciones de entrada/salida bsicas que se pueden usar,
se encuentran los archivos de cabecera stdio.h y conio.h.
105* Para poder usar dichas funciones, se debe poner disponible con la directiva
del compilador include en la siguiente forma:
#include <stdio.h>
#include <conio.h>
106* Las funciones mas comunes son las siguientes:
Funcin:
int getche(void);
Libreria:conio.h
Accin:
Lee un carcter desde el teclado, colocndolo en una variable
de tipo entero (char o int), haciendo eco en pantalla del carcter
captado.
Funcin:
Accin:
Funcin:
Accin:
int getchar(void);
Libreria:stdio.h
Lee un carcter desde el teclado, pero espera el retorno de
carro para pasarlo al sistema.
Funcin:
Accin:
int getch(void);
Libreria:conio.h
Lee un carcter al igual que getche, pero no hace eco en
pantalla.
Funcin:
A.Rodriguez L.
libreria:stdio.h
18
Funcin:
Accin:
Funcin:
Accin:
A.Rodriguez L.
19
Funcin:
Accin:
A.Rodriguez L.
20
21
ESTRUCTURAS CONDICIONALES
22
A.Rodriguez L.
23
ESTRUCTURAS CCLICAS
A.Rodriguez L.
24
25
26
A.Rodriguez L.
27
3.1
A.Rodriguez L.
28
149* Ejemplo:
#include <stdio.h>
cambia_dat(int a; int *b)
{ a+=5;
(*b)+=5;
}
main()
{ int h=10,i=10;
cambia_dat(h,&i);
printf(h=%d i=%d,h,i);
}
3.1.2 Funciones que regresan valores
150* Para poder regresar valores a la rutina llamadora existe la sentencia return.
Esta sentencia termina la ejecucin de una funcin; permitindonos regresar un
valor especifico.
151* Este valor debe de ser del mismo tipo del declarado antes del nombre de la
funcin. Sin embargo no debe ser de tipo void, ya que esto indica que no se desea
regresar valor.
152* Si no se declara ningn tipo entonces devuelve int.
A.Rodriguez L.
29
156* Existe una librera standard de C que permite manejar funciones que tengan
parmetros variables.
A.Rodriguez L.
30
DEFINICION DE ARREGLOS
31
A.Rodriguez L.
32
33
char *
*dest,char
*fuen)
char * strcat(char *dest,char
*fuen)
int strcmp(char *cad1,char *cad2)
A.Rodriguez L.
Accin
copia la cadena fuen a la
cadena dest
Agrega la cadena fuen a la
cadena dest.
Compara
lexicograficamente
dos
cadenas, devolviendo:0 si
son iguales; positivo si cad1
es mayor que cad2 y
negativo si cad1 en menor
que cad2.
Regresa el numero de
caracteres de la cadena sin
contar el nulo.
34
CONCEPTOS DE APUNTADORES
181* Los punteros son variables que pueden almacenar una direccin de memoria,
tomando el valor de la misma memoria en funcin al tipo base del puntero.
182* Estas variables especiales se definen de la siguiente forma:
tipo *nombre_var;
183* El tipo es algunos de los definidos por el C estandard o por el usuario. El *
indica que se trata de una variable puntero que tiene el nombre especificado. El
tipo indica ademas la cantidad de bytes y la forma que tiene el dato ahi
almacenado.
3.5.1 Funciones para el manejo de memoria dinamica.
184* Normalmente un puntero se usa para manejar memoria del heap, asignada
dinamicamente. Esta memoria se asigna y libera por medio de funciones
predefinidas, que se encuentran (variando de la versin del compilador) en la
libreria stdlib.h o alloc.h. Dichas funciones se describen a continuacin:
void * malloc(unsigned tam);
Asigna una porcin de memoria del heap, regresando la direccin de esta
memoria o 0 no se pudo resolver la asignacin. El valor devuelto se debe
asignar a una variable tipo puntero.
void free(void *ptr);
Libera la memoria previamente asignada con malloc, calloc.o realloc.
void *calloc(unsigned size, unsigned elem);
Asigna memoria para un array donde el tamao de cada elemento esta dado
por size y el numero de elementos del array es elem. Depues de asignar la
memoria, inicializa los elementos del array con cero.
void *realloc(void *ptr,unsigned tnew);
Relocaliza o asigna un espacio de memoria bajo la siguiente reglas:
- Si ptr es cero, crea un puntero de la cantidad de bytes indicado en tnew.
Similar a como lo hace malloc.
- Si ptr es diferente de cero y tnew es igual a 0, libera la memoria usada.
Similar como lo hace free.
- Si ptr es diferente de cero y tnew es mayor que cero, pero menor o igual
que la memoria previamente asignada, no hace ningun cambio.
- Si ptr es diferente de cero y tnew es mayor que la memoria previamente
asignada, busca una nueva localidad de memoria donde asignar la memoria
solicitada y copia el contenido de la memoria anterior, con lo que no hay
riesgo de perder datos. Si encuentra memoria, devuelve la direccin de
esta, sino devuelve cero.
A.Rodriguez L.
35
+,++, --
>,
<,
>=,<=, !=
FUNCIONAMIENTO
Proporciona la direccion de memoria que tiene la
variable que precede.
Proporciona el contenido de la direccin de memoria
que contiene la variable a la cual precede. Por
supuesto, la variable que precede debe ser de tipo
puntero. Aqui es donde C utiliza el tipo base para saber
la cantidad de bytes y la forma que tienen los datos.
Suma o resta un valor entero a un puntero, lo cual
equivale a desplazar el valor de un puntero.
El incremento o decremento en punteros, es una
operacion que es posible realizar en C. La direccion en
que se incrementa un puntero, depende del tipo base
que se tenga.
La asignacion entre punteros es posible, aunque los
tipos base no sean iguales. En este caso, el
compilador indicara un mensaje de advertencia.
Diciendonos que los tipos base no coinciden.
Permite comparar el contenido de dos punteros
36
A.Rodriguez L.
37
38
A.Rodriguez L.
39
40
ESTRUCTURAS Y UNIONES
3.6.1 Estructuras
207* Una estructura es una coleccion de datos de diferente tipo, conocidos con el
mismo nombre generico, pero con un nombre particular a cada uno de los
elementos de la estructura.
208* A estos elementos se les conoce como campos. La forma general como se
define estructura es la siguiente:
struct nom_tipo
{
tipo nom1;
tipo nom2;
:
:
tipo nomn;
} vars_stru;
209* El nom_tipo es el nombre con que se identificar un tipo struct. Las vars_stru
son una lista de variables que tendran el tipo indicado entre llaves. Se pueden
omitir una o la otra pero no ambas.
210* Para hacer referencia a cualquier elementos de una estructura, se indica el
nombre de la variable, seguida de un punto y el nombre del elemento que se
desea usar.
211* Ejemplo:
#include <string.h>
main()
A.Rodriguez L.
41
A.Rodriguez L.
42
43
A.Rodriguez L.
44
45
A.Rodriguez L.
46
ARCHIVOS
A.Rodriguez L.
47
FUNCION
int fprintf
(FILE *flujo,
char *formato,
list_arg);
int fscanf (FILE *flujo,
char
*formato,
list_arg);
int fputc
( int ch,
FILE *flujo);
A.Rodriguez L.
DESCRIPCION
Abre un archivo con el nombre indicado
en f_nom y devuelve la direccin del flujo
indicado. El tipo de operaciones que se
desea se indica en modo, la cual se rige
por la siguiente tabla.
Modo Operacin
r
Abre un archivo texto para lectura.
w Crear un archivo texto para escritura.
a
Abre para aadir un archivo de texto.
rb Abrir un archivo binario para lectura.
wb Crear un arch. binario para escritura
ab Abre para aadir un archivo binario
r+ Abre arch. texto para lec. / esc.
w+ Crea arch. texto para lec. / esc.
rb+ Abre un arch. binario para lec./esc.
wb+ Crear un arch. binario para lec./esc.
ab+ Abrir un arch. binario para lec./esc.
DESCRIPCION
Hace una salida texto al flujo
especificado, con el formato que se
indica. list_arg es una serie de
argumentos que tendrn salida. La
cadena de formato es idntica a las
usadas en printf.
Funciona igual que scanf, pero ahora para
el flujo indicado.
Hace una salida del caracter ch en flujo,
en la posicin que tenga el indicador de
archivo. El valor devuelto por fputc es el
valor del nmero de caracter escrito. Para
48
int fputs
(char *cad,
FILE *flujo);
char *fgets
(char *cad,
int num,
FILE *flujo)
FUNCION
int fwrite
(void *buf, int tam,
int cuenta, FILE
*flujo)
int fread
( void *buf,
int tam,
int cuenta,
FILE *flujo);
int fseek
(FILE *flujo,
long despl, int origen)
A.Rodriguez L.
FUNCION
void
rewind(FILE
*flujo)
void clearerr
*flujo)
(FILE
void setbuf
(FILE *flujo, char *buf);
A.Rodriguez L.
siguientes:
SEEK_SET 0 Del comienzo del archivo.
SEEK_CUR 1 De la posicin actual.
SEEK_END 2 Desde el fin del archivo.
Funcin que devuelve la posicin actual
del indicador del flujo especificado. En
flujos binarios es el nmero de bytes a
partir del inicio del archivo. En flujos de
texto este valor varia ya que la corriente
real de caracteres usados depende del
dispositivo. Si el dispositivo no soporta
bsqueda aleatoria, si el valor es
indefinido o si ocurri un error da -1L.
DESCRIPCION
Mueve el indicador de posicin del
archivo, al inicio del mismo. Tambin
inicializa los indicadores de error y fin de
archivo.
Inicializa el indicador de error a 0 en el
flujo indicado. El indicador de error se
inicializa solo con rewind o esta funcin.
Comprueba si el indicador de archivo ha
alcanzado el fin. Da 0 (falso) s no esta al
final del archivo y diferente de 0 si esta.
Comprueba si existi error en una
operacin con el archivo. 0 indica sin error
otro valor indica algn error.
Vuelca el buffer del archivo especificado.
Cierra el archivo apuntado por flujo,
volcando previamente su buffer al archivo.
Devuelve 0 si se cierra correctamente,
sino devuelve cualquier otro nmero.
Se usa para especificar el buffer de flujo a
utilizar o (si se lama con buf a nulo) para
desactivar el buffer. Si un buffer va ha ser
definido por el programador, debe ser de
BUFSIZ caracteres (esta constante esta
50
int setvbuf
(FILE *flujo, char *buf,
Int modo, int tam)
A.Rodriguez L.
definida en stdio.h).
Permite al programador especificar el
buffer, su tamao y su modo. El buf es un
puntero a un lugar de memoria que se
usar como buffer. El tamao del buffer
esta dado por tam y si buf es nulo lo
desactiva. Si modo es:
_IOFBF = Op. de buffer complet, es por
default.
_IONBF = No usa buffer definido.
_IOLBF = Buffer por lnea, vuelca buffer
cada CR
51
TEMAS AVANZADOS DE C
5.1
EL PREPROCESADOR DE C
#define <nom_macro> <cadena>
52
53
54
A.Rodriguez L.
55
Memoria Baja
Cdigo
Datos Estticos
Heap
Hasta 64 kb
Espacio Libre
SP
Stack
Memoria Alta
Modelo tiny
258* Compila un programa de tal manera que todos los registros, tengan el mismo
valor y el direccionamiento se hace usando solo el desplazamiento (16 bits en un
puntero cercano).
A.Rodriguez L.
56
CS
EL MODELO SMALL
Memoria Baja
Cdigo
Hasta 64 kb
DS,SS
Datos Estticos
Heap
Hasta 64 kb
Espacio Libre
SP
Stack
Heap Far
Espacio Libre
Resto de la
memoria
Memoria Alta
Modelo small
260* Se pueden asignar mximo de 64 kb (1 segmento) para cdigo y un mximo
de 64 kb (1 segmento) para datos (datos estticos + stack + heap cercano).
261* Como el puntero para manejar datos, sigue siendo solo el desplazamiento
dentro del segmento, el rendimiento del programa es casi tan bueno como el del
modelo tiny, pero ahora soporta una porcin de cdigo mucho mayor.
262* Este modelo es ideal para aquellos programas que tiene un buen balance
entre tamao del cdigo y datos.
263* En este modelo se pueden empezar a manejar datos en el heap lejano (far)
que ocuparan el resto de la memoria. La direccin de memoria de un dato en el
heap lejano ocupara 4 bytes.
A.Rodriguez L.
57
CS
DS,SS
EL MODELO MEDIUM
Memoria Baja
Cdigo total
de varios archivos
Cada archivo
de hasta 64 kb
Datos Estticos
Heap
Hasta 64 kb
Espacio Libre
SP
Stack
Heap Far
Espacio Libre
Resto de la
memoria
Memoria Alta
Modelo Medium
264* Este modelo permite que se puedan tener varios archivos de cdigo de
mximo 64 kb cada uno. Por ello para manejar el cdigo requiere una direccin
dada en forma completa (segmento y desplazamiento).
265* El tamao de la zona de datos no cambia con respecto al modelo anterior.
Solo se maneja con el desplazamiento, por lo cual solo se tiene acceso a 64 de
datos.
266* El modelo es bueno para programas con cdigo grande pero pocos datos. El
sistemas funcionar lento para procesos de llamados a funciones, pero en cuanto
a manejo de datos es tan rpido como los modelos anteriores.
267* En este modelo se definen dos tipos de heap, el cercano que se encuentra
antes del stack y el lejano que se encuentra despus del stack. Los punteros al
heap cercano (near) ocupan solo dos bytes para dar el desplazamiento de una
variable dinmica.
268* Los punteros lejanos (far) ocuparan 4 bytes, ya que tiene que dar la direccin
de memoria completa (segmento y desplazamiento) donde esta un dato.
A.Rodriguez L.
58
CS
DS
EL MODELO COMPACT
Memoria Baja
Cdigo total
de varios archivos
Hasta 64 kb
Datos Estticos
Hasta 64 kb
SS
Espacio Libre
SP
Hasta 64 kb
Stack
Heap
Resto de la
memoria
Espacio Libre
Memoria Alta
Modelo Compact
269* En este modelo, el tamao del cdigo no puede pasar de un segmento de
datos (64 kb), por lo que el puntero para cdigo es solo el desplazamiento de una
direccin de memoria.
270* Sin embargo los datos estticos y el stack pueden ocupar hasta un mximo de
64 kb cada uno.
271* En este modelo los punteros para manejar la memoria del heap ocupan 4
bytes. No existe ya el heap cercano, y el heap lejano se encuentra despus del
stack.
A.Rodriguez L.
59
CS
DS
EL MODELO LARGE
Memoria Baja
Cdigo total
de varios archivos
Datos Estticos
SS
Cada archivo
de hasta
64 kb
Cada variab.
max.de 64 kb
Espacio Libre
SP
Stack
Heap Far
Cada variab.
max.de 64 kb
Resto de la
memoria
Espacio Libre
Memoria Alta
Modelo Large
272* En este modelo el cdigo pueden ocupar mas de 64 Kb, distribuyndolo en
varios archivos con una extensin mxima cada uno de 64 Kb.
273* El espacio proporcionado para los datos estticos y el stack depende del que
necesiten las variable en ellos declaradas, no pudiendo una variable (en
cualquiera de las dos zonas) ocupar mas de 64 KB.
274* Por lo anterior, los punteros a lo datos en este modelo ocupan 4 bytes y su
funcionamiento es mas lento que en los anteriores modelos.
A.Rodriguez L.
60
CS
DS
EL MODELO HUGE
Memoria Baja
Cdigo total
de varios archivos
Datos Estticos de
varios archivos
SS
Cada archivo
de hasta
64 kb
Cada variab.
mas de 64 kb
Espacio Libre
SP
Stack
Heap Far
Cada variab.
mas de 64 kb
Resto de la
memoria
Espacio Libre
Memoria Alta
Modelo Huge
275* Es similar al anterior, solo que aqu una sola variable si puede ocupar mas de
64Kb de espacio, lo cual lo hace aun mas lento que todos los anteriores.
Excepciones en el manejo de punteros.
276* Si se esta trabajando en un modelo pequeo, pero se tiene la necesidad de
manejar unos pocos datos con las caractersticas que da un modelo grande (P.E.
usar una variable que ocupe mas de 64), no es necesario cambiar el modelo
completo.
277* Si se hiciera esto, el rendimiento del programa se vera afectado, solo por
estos datos. Para solucionar este problemas, los compiladores de PC agregaron
los modificadores : far, huge y near.
278* El modificador far se puede aplicar a variables y le indica al compilador que
estas se manejaran con un puntero que ocupe 4 bytes (2 para el segmento y 2
para el desplazamiento).
A.Rodriguez L.
61
A.Rodriguez L.
62